WPF 截图控件之移除控件(九)「仿微信」

打印 上一主题 下一主题

主题 841|帖子 841|积分 2523

WPF 截图控件之移除控件(九)「仿微信」
WPF 截图控件之移除控件(九)「仿微信」
作者:WPFDevelopersOrg
原文链接:    https://github.com/WPFDevelopersOrg/WPFDevelopers

正文

一、前几篇实现了添加 方框椭圆箭头 此时需要删除所添加的操作和撤销上次操作。
1)选中操作

  • 在添加方框椭圆箭头画笔文字的同时需要设置Tag=Draw用于标记是操作的痕迹 实现MouseLeftButtonDown事件。
  • 监听到操作MouseLeftButtonDown事件后循环VisualTreeHelper.GetChildren获取返回指定可视对象包含的子级个数。判断Tag==Draw设置其Opacity=1清除上次选择。
  • 用一个变量存放当前选择的操作使用FrameworkElement,然后设置当前内容Opacity=0.7
  1. //箭头
  2. controlArrow.MouseLeftButtonDown += (s, e) =>
  3.                 {
  4.                     SelectElement();
  5.                     frameworkElement = s as Control;
  6.                     frameworkElement.Opacity = .7;
  7.                 };
  8. //方框
  9. borderRectangle.MouseLeftButtonDown += (s, e) =>
  10.                         {
  11.                             SelectElement();
  12.                             frameworkElement = s as Border;
  13.                             frameworkElement.Opacity = .7;
  14.                         };
  15. //椭圆
  16. drawEllipse.MouseLeftButtonDown += (s, e) =>
  17.                         {
  18.                             SelectElement();
  19.                             frameworkElement = s as Ellipse;
  20.                             frameworkElement.Opacity = .7;
  21.                         };
  22. //文字
  23.                          textBorder.PreviewMouseLeftButtonDown += (s, e) =>
  24.                     {
  25.                         _radioButtonText.IsChecked = true;
  26.                         _radioButtonText_Click(null,null);
  27.                         SelectElement();
  28.                         var border = s as Border;
  29.                         frameworkElement = border;
  30.                         frameworkElement.Opacity = .7;
  31.                         border.BorderThickness = new Thickness(1);
  32.                     };
  33. //画笔
  34.                      polyLine.MouseLeftButtonDown += (s, e) =>
  35.                     {
  36.                         _radioButtonInk.IsChecked = true;
  37.                         _radioButtonInk_Click(null, null);
  38.                         SelectElement();
  39.                         frameworkElement = s as Polyline;
  40.                         frameworkElement.Opacity = .7;
  41.                     };
  42. void SelectElement()
  43.         {
  44.             for (int i = 0; i < VisualTreeHelper.GetChildrenCount(_canvas); i++)
  45.             {
  46.                 var child = VisualTreeHelper.GetChild(_canvas, i);
  47.                 if (child is FrameworkElement frameworkElement && frameworkElement.Tag != null)
  48.                     if (frameworkElement.Tag.ToString() == _tag)
  49.                         frameworkElement.Opacity = 1;
  50.             }
  51.         }
复制代码
2)删除操作 按下Delete键删除。
  1. if (e.Key == Key.Delete)
  2.             {
  3.                 if (_canvas.Children.Count > 0)
  4.                     _canvas.Children.Remove(frameworkElement);
  5.             }
复制代码
3)撤销操作 按下Ctrl+Z 撤销上次操作。
  1. if (e.KeyStates == Keyboard.GetKeyStates(Key.Z) && Keyboard.Modifiers == ModifierKeys.Control)
  2.             {
  3.                 if (_canvas.Children.Count > 0)
  4.                     _canvas.Children.Remove(_canvas.Children[_canvas.Children.Count - 1]);
  5.             }
复制代码
完整代码如下

项目地址


  • 框架名:WPFDevelopers
  • 作者:WPFDevelopers
  • GitHub
  • Gitee
    还未完成功能谁有兴趣欢迎在Github拉取分支后更改。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表