WPF 截圖控制項之移除控制項(九)「仿微信」 WPF 截圖控制項之移除控制項(九)「仿微信」 作者:WPFDevelopersOrg 原文鏈接: https://github.com/WPFDevelopersOrg/WPFDevelopers 框架使用大於等於.NET40; Visual Studio ...
WPF 截圖控制項之移除控制項(九)「仿微信」
WPF 截圖控制項之移除控制項(九)「仿微信」
作者:WPFDevelopersOrg
-
框架使用大於等於
.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]);
}