MouseDown事件在WPF窗口中停止触发

本文关键字:窗口 事件 WPF MouseDown | 更新日期: 2023-09-27 18:28:39

我有一个WPF窗口,当用户点击任何地方时,甚至在窗口外,我都会在其中订阅鼠标按下事件:

void RightClickWindow_MouseDown(object sender, MouseButtonEventArgs e)
{
    try
    {
        base.OnMouseDown(e);
        Point mousePositionInApp = Mouse.GetPosition(this);
        Point mousePositionInScreenCoordinates = PointToScreen(mousePositionInApp);
        if (mousePositionInScreenCoordinates.X < Left || mousePositionInScreenCoordinates.X > Left + Width || mousePositionInScreenCoordinates.Y < Top || mousePositionInScreenCoordinates.Y > Top + Height)
        {
            Close();
        }
    }
    catch { }
}
void RightClickWindow_Activated(object sender, EventArgs e)
{
    Mouse.Capture(this, CaptureMode.SubTree);
}

如果点击超出范围,我将关闭窗口。除了在一个特殊情况下,我正在尝试修复它,但不知道如何修复。以下是它停止工作的地方:

我在XAML中有一个简单的WPF Button。如果我用鼠标左键单击该按钮,并在鼠标放下的同时,将光标拖动到按钮的边界之外,然后释放鼠标左键,这些捕获事件将不再触发。为什么会这样,以及如何为这种特殊情况修复代码?

MouseDown事件在WPF窗口中停止触发

单击Button时,Window将丢失鼠标捕获,这就是为什么MouseDown事件再也不会被调用的原因。Deactivate事件的结束应该适用于您的场景。