【问题标题】:How can I raise a mouse event in WPF / C# with specific coordinates?如何在具有特定坐标的 WPF/C# 中引发鼠标事件?
【发布时间】:2013-10-15 10:45:20
【问题描述】:

我想通过在 WPF 窗口中的任意位置单击用户并通过已知差异(例如在 x,y 处点击,在 x+100, y+100 处引发点击事件。

潜在的问题是有一个显示监视器相对于覆盖的触摸屏物理移动。我不想每次移动都重新校准触摸屏,而是想将平移偏移量添加到点击事件中。

我查看了用于 mouse_event 的 Win32 API 及其替代函数 SendInput。我承认我迷路了,因为我对 API 不是很熟悉。

当然,这是一个很容易解决的问题,但我无法在任何地方找到可以实现解决方案的示例代码。任何有关如何将其添加到我的代码中的帮助、指针或可靠示例都将不胜感激。

谢谢 标记

【问题讨论】:

  • 你不能在处理程序中做这个调整吗?

标签: c# wpf mouseevent


【解决方案1】:

Win32 API 不适用于 WPF,这个 link 可能会有所帮助

 // Copied the snippet of code from the link above, just to help future readers
 MouseEventArgs e = new MouseEventArgs(Mouse.PrimaryDevice, 0);
 e.RoutedEvent = Mouse.MouseEnterEvent;

 youUIElement.RaiseEvent(e);
 // Or
 InputManager.Current.ProcessInput(e);

【讨论】:

  • 谢谢你,Waleed,我想这让我更进一步。但是,我仍然不明白的是如何进行翻译。在上面的 sn-p 中的 event args, e 在哪里指定翻译后的光标的新坐标。设置坐标后,由于我不知道新坐标下的 UI 元素(它可能只是空白窗口空间),ProcessInput(e) 会自动解决这个问题吗?我需要将路由策略设置为 Tunneling 还是做其他事情?
  • 嗯,您应该使用事件冒泡来捕获子元素上引发的每个特定事件。捕获后,您将获得对引发事件的 UIElement 的引用,然后您可以指定新坐标并转发它们。要检测坐标是否在客户区之外,只需尝试: if (this.Clip.Bounds.Bottom > newY || this.Clip.Bounds.Left > newX dont) 其中 this 指的是您的主窗口
  • 链接已失效
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多