WPF,窗口拖动事件与窗口内控件点击事件

帮手程序(assister.exe)在运行鼠标自动操作脚本时,可以弹出置顶的悬浮窗口,实时显示程序运行状态。悬浮窗口上一个小按钮可以快速切换回帮手程序主窗口。如图:

这个悬浮窗口可以自由拖动到屏幕任意位置,避免遮挡其他操作窗口。实现该功能时,通常只需在窗口控件中处理PreviewMouseLeftButtonDown事件,并执行以下代码:

private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

{

if (e.LeftButton == MouseButtonState.Pressed)

{

this.DragMove();

}

}

然而,由于窗口内部包含按钮控件需要响应点击操作,上述代码会导致按钮点击事件无法触发。

修改后的解决方案是让窗口处理以下三个关键事件:

<Window

...

PreviewMouseLeftButtonDown="Window_PreviewMouseLeftButtonDown"
PreviewMouseMove="Window_PreviewMouseMove"
PreviewMouseLeftButtonUp="Window_PreviewMouseLeftButtonUp"

...

Topmost="True"

WindowStyle="None"

AllowsTransparency="True"

Background="Transparent"

>

private void Window_PreviewMouseLeftButtonDown (object sender, MouseButtonEventArgs e)

{

_mousePressedPosition = e.GetPosition(this);

}

private voidWindow_PreviewMouseMove (object sender, MouseEventArgs e)

{

if (Mouse.LeftButton == MouseButtonState.Pressed && _mousePressedPosition != e.GetPosition(this))

{

_isMouseDragMove = true;

DragMove();

}

}

private void Window_PreviewMouseLeftButtonUp (object sender, MouseButtonEventArgs e)

{

if (_isMouseDragMove)

{

_isMouseDragMove = false;

e.Handled = true;

}

}

【免费】帮手Pro1.2.3自动化鼠标点击资源-CSDN下载

相关推荐
FuckPatience2 天前
WPF 具有跨线程功能的UI元素
wpf
诗仙&李白2 天前
HEFrame.WpfUI :一个现代化的 开源 WPF UI库
ui·开源·wpf
He BianGu2 天前
【笔记】在WPF中Binding里的详细功能介绍
笔记·wpf
He BianGu3 天前
【笔记】在WPF中 BulletDecorator 的功能、使用方式并对比 HeaderedContentControl 与常见 Panel 布局的区别
笔记·wpf
123梦野3 天前
WPF——效果和可视化对象
wpf
He BianGu3 天前
【笔记】在WPF中Decorator是什么以及何时优先考虑 Decorator 派生类
笔记·wpf
时光追逐者4 天前
一款专门为 WPF 打造的开源 Office 风格用户界面控件库
ui·开源·c#·.net·wpf
He BianGu4 天前
【笔记】介绍 WPF XAML 中 Binding 的 StringFormat详细功能
笔记·wpf
Rotion_深5 天前
C# WPF使用线程池运行Action方法
c#·wpf·线程池
攻城狮CSU5 天前
WPF 深入系列.2.布局系统.尺寸属性
wpf