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

时间:2014-11-01 19:19:36

标签: c# .net wpf events button

我有一个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。如果我左键单击此按钮,并且当鼠标按下时,我将光标拖动到按钮边界之外,然后我释放鼠标左键,这些捕获事件不再触发。为什么会这样,我如何修复这个特例的代码呢?

1 个答案:

答案 0 :(得分:1)

单击Button Window失去鼠标捕获时,这就是永远不再调用MouseDown事件的原因。关闭Deactivate事件应该适用于您的方案。