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

发布于:2025-07-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

帮手程序(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 void Window_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下载


网站公告

今日签到

点亮在社区的每一天
去签到