【问题标题】:How do I access Mouse movement events in WPF regardless of where the mouse is?无论鼠标在哪里,如何访问 WPF 中的鼠标移动事件?
【发布时间】:2009-01-15 15:50:13
【问题描述】:

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

protected override void OnMouseMove(MouseEventArgs e)

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

我认为 Mouse.Capture 是解决方案,并且我已经使用它来捕获到我的窗口,但是 MouseMove 仍然仅在鼠标悬停在窗口上时才被提升。

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

【问题讨论】:

    标签: c# wpf events mouse


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果您想在您的应用程序范围内执行此操作,您应该使用PreviewMouseMove 事件。您的 Window 在路由到子元素之前总是会先得到它。如果您在 Window 级别处理 MouseMove,则子元素可能会将事件标记为已处理,因此您可能永远不会收到该事件。

      使用PreviewMouseMove 的替代方法是将Window 子类化并将类处理程序附加到MouseMove 并指定您始终希望收到通知,而不管其他人是否将事件标记为已处理。更多信息here

      【讨论】:

      • 由于此解决方案仅在我的应用程序范围内有效,因此它不是我想要的。不过,感谢您的链接:WPF 事件处理现在变得更有意义了。
      猜你喜欢
      • 2023-03-22
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      相关资源
      最近更新 更多