ToB企服应用市场:ToB评测及商务社交产业平台
标题:
WPF 截图控件之移除控件(九)「仿微信」
[打印本页]
作者:
张国伟
时间:
2022-9-16 17:14
标题:
WPF 截图控件之移除控件(九)「仿微信」
WPF 截图控件之移除控件(九)「仿微信」
WPF 截图控件之移除控件(九)「仿微信」
作者:WPFDevelopersOrg
原文链接:
https://github.com/WPFDevelopersOrg/WPFDevelopers
框架使用大于等于.NET40;
Visual Studio 2022;
项目使用
MIT
开源许可协议;
截图控件暂时更新到此,未实现功能如下
Hook 快捷打开截图。
添加操作还不能移动和更改大小
获取根据当前坐标返回进程的大小Rect。
获取鼠标区域RGB。
1.WPF实现截屏「仿微信」
2.WPF 实现截屏控件之移动(二)「仿微信」
3.WPF 截图控件之伸缩(三) 「仿微信」
4.WPF 截图控件之绘制方框与椭圆(四) 「仿微信」
5.WPF 截图控件之绘制箭头(五)「仿微信」
6.WPF 截图控件之绘制箭头(六)「仿微信」
7.WPF 截图控件之文字(七)「仿微信」
8.WPF 截图控件之画笔(八)「仿微信」
正文
一、前几篇实现了添加
方框
、
椭圆
、
箭头
此时需要删除所添加的操作和撤销上次操作。
1)
选中操作
在添加
方框
、
椭圆
、
箭头
、
画笔
、
文字
的同时需要设置Tag=Draw用于标记是操作的痕迹 实现MouseLeftButtonDown事件。
监听到操作MouseLeftButtonDown事件后循环
VisualTreeHelper.GetChildren
获取返回指定可视对象包含的子级个数。判断Tag==Draw设置其Opacity=1清除上次选择。
用一个变量存放当前选择的操作使用
FrameworkElement
,然后设置当前内容Opacity=0.7
//箭头
controlArrow.MouseLeftButtonDown += (s, e) =>
{
SelectElement();
frameworkElement = s as Control;
frameworkElement.Opacity = .7;
};
//方框
borderRectangle.MouseLeftButtonDown += (s, e) =>
{
SelectElement();
frameworkElement = s as Border;
frameworkElement.Opacity = .7;
};
//椭圆
drawEllipse.MouseLeftButtonDown += (s, e) =>
{
SelectElement();
frameworkElement = s as Ellipse;
frameworkElement.Opacity = .7;
};
//文字
textBorder.PreviewMouseLeftButtonDown += (s, e) =>
{
_radioButtonText.IsChecked = true;
_radioButtonText_Click(null,null);
SelectElement();
var border = s as Border;
frameworkElement = border;
frameworkElement.Opacity = .7;
border.BorderThickness = new Thickness(1);
};
//画笔
polyLine.MouseLeftButtonDown += (s, e) =>
{
_radioButtonInk.IsChecked = true;
_radioButtonInk_Click(null, null);
SelectElement();
frameworkElement = s as Polyline;
frameworkElement.Opacity = .7;
};
void SelectElement()
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(_canvas); i++)
{
var child = VisualTreeHelper.GetChild(_canvas, i);
if (child is FrameworkElement frameworkElement && frameworkElement.Tag != null)
if (frameworkElement.Tag.ToString() == _tag)
frameworkElement.Opacity = 1;
}
}
复制代码
2)
删除操作
按下Delete键删除。
if (e.Key == Key.Delete)
{
if (_canvas.Children.Count > 0)
_canvas.Children.Remove(frameworkElement);
}
复制代码
3)
撤销操作
按下Ctrl+Z 撤销上次操作。
if (e.KeyStates == Keyboard.GetKeyStates(Key.Z) && Keyboard.Modifiers == ModifierKeys.Control)
{
if (_canvas.Children.Count > 0)
_canvas.Children.Remove(_canvas.Children[_canvas.Children.Count - 1]);
}
复制代码
完整代码如下
ScreenCut GitHub
ScreenCut.xaml Gitee
ScreenCut Gitee
ScreenCut.xaml Gitee
项目地址
框架名:WPFDevelopers
作者:WPFDevelopers
GitHub
Gitee
还未完成功能谁有兴趣欢迎在Github拉取分支后更改。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4