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
。如果我用鼠标左键单击该按钮,并在鼠标放下的同时,将光标拖动到按钮的边界之外,然后释放鼠标左键,这些捕获事件将不再触发。为什么会这样,以及如何为这种特殊情况修复代码?
单击Button
时,Window
将丢失鼠标捕获,这就是为什么MouseDown
事件再也不会被调用的原因。Deactivate
事件的结束应该适用于您的场景。