【问题标题】:Get Mouse Position on Canvas (But NOT on window)?在画布上获取鼠标位置(但不在窗口上)?
【发布时间】:2011-08-07 03:16:08
【问题描述】:

我在 WPF 4 和 vb.net 2010 中有一个项目。

我有一个窗口内的画布。窗口是全屏的,但画布设置为窗口中心的纯色 640x480。我需要在画布内获取鼠标位置,而不是在窗口内。我该怎么做?

【问题讨论】:

  • 呃,为什么不实现画布的MouseMove事件呢?
  • 因为在某些情况下,除了布尔值之外,事件不会自行呈现值。

标签: wpf vb.net canvas mouse mouse-position


【解决方案1】:

你好,重要的是

不在窗口上

画布也是窗口的一部分。 一个例子:

  • Window.AllowsTransparency 状态为真
  • Window.Background 为 #00000000(完全透明)
  • Window.Style 为无
  • Window.State 被最大化并且
  • 窗口上没有控件或元素!

... 所以如果你启动应用程序你会看到Nothing 现在告诉我如何以像素为单位获取屏幕上的鼠标位置

!警告! 如果你 juse Mouse.GetPosition(this); 它每次都会返回 x0 y0

【讨论】:

  • 是的.. 如果需要,我该怎么办?在 window.MouseButtonUp 事件中?
【解决方案2】:

所以我通过使用 System.Windows.Forms.Control.MousePosition 解决了这个问题,它有点混合了 wpf 和 Windows.Forms 但我已经放弃了 xD。

对不起,大喊大叫:/

为了方便我,我做了一个扩展:

<DebuggerHidden> _
<System.Runtime.CompilerServices.Extension> _
Public Function toWfpPoint(p As System.Drawing.Point) As Point
    Return new Point(p.X, p.Y)
End Function

现在我可以这样判断了:

Dim MousPos As Point = System.Windows.Forms.Control.MousePosition.toWfpPoint

【讨论】:

    【解决方案3】:

    这不行吗?

    Point p = Mouse.GetPosition(canvas);
    

    鼠标指针的位置是 相对于指定的计算 左上角的元素 元素是原点,

    【讨论】:

    • 嗯。显然是毕竟,但尝试使用这些(设置为变量)来设置同一画布上对象的 left 和 top 属性是行不通的......
    • 发现问题。解决方案是这个问题的公认答案:link
    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 2018-02-01
    • 1970-01-01
    • 2014-01-20
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多