简而言之:如果鼠标进入WPF窗口时按下任何鼠标按钮,则无论鼠标是否被任何进程捕获,都会忽略所有鼠标事件。
挑战
创建两个WPF 4.5项目。在第一个中,添加一个带有MouseDown处理程序的Border。在该处理程序内部,执行您可以想到的所有内容以释放鼠标捕获:
this.ReleaseMouseCapture();
element.ReleaseMouseCapture(); // "sender"
Mouse.Capture(null);
while (Mouse.Captured != null)
Mouse.Captured.ReleaseMouseCapture();
ReleaseCapture(); //Win32.ReleaseCapture()
在另一个项目中,将MouseEnter处理程序添加到将更改其背景的默认网格。
启动它们,边框上的MouseDown和"拖动"到另一个窗口。在释放鼠标按钮之前,第二个窗口的背景不会改变。
真正令人烦恼的是,如果你留在第一个窗口内,那么“尝试取消”"鼠标似乎工作。使用MouseEnter处理程序在第一个窗口中添加另一个元素,它将正常启动。这意味着WPF不了解或关心跨进程捕获。当鼠标首次进入应用程序时,如果任何鼠标按钮处于“按下”状态,它就会忽略事件。
任何人都知道在输入鼠标之前是否可以让WPF元素响应鼠标事件?