我有一个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
。如果我左键单击此按钮,并且当鼠标按下时,我将光标拖动到按钮边界之外,然后我释放鼠标左键,这些捕获事件不再触发。为什么会这样,我如何修复这个特例的代码呢?
答案 0 :(得分:1)
单击Button
Window
失去鼠标捕获时,这就是永远不再调用MouseDown
事件的原因。关闭Deactivate
事件应该适用于您的方案。