无论鼠标在哪里,如何访问WPF中的鼠标移动事件?

时间:2009-01-15 15:50:14

标签: c# wpf events mouse

我尝试使用MouseMove事件来跟踪鼠标的位置。

protected override void OnMouseMove(MouseEventArgs e)

当鼠标在给定的UIElement(在这种情况下,我的应用程序的窗口)上时,这是有效的,但无论鼠标在哪里,我都想访问这些数据,最好是不管我的应用程序是否有焦点

我认为Mouse.Capture是解决方案,我用它来捕获到我的窗口,但鼠标移动窗口时鼠标移动仍然只会被提升。

有没有人知道如何让MouseMove事件(或类似事件)独立于鼠标位置?

2 个答案:

答案 0 :(得分:2)

你可以P / Invoke Win32 GetCursorPos函数。我认为这将是最可靠的方式: GetCursorPos on MSDN

可在此处找到所需的DllImport声明: http://www.pinvoke.net/default.aspx/user32/GetCursorPos.html

答案 1 :(得分:2)

如果要在应用程序的范围内执行此操作,则应使用PreviewMouseMove事件。在Window路由到子元素之前,MouseMove将始终首先获得此信息。如果您在Window级别处理PreviewMouseMove,则子元素可能会将事件标记为已处理,因此您可能永远无法获得该事件。

使用Window的替代方法是继承MouseMove并将类处理程序附加到{{1}}并指定您始终要通知,无论其他人是否将事件标记为已处理。更多信息here