在画布上获取鼠标位置(而不是窗口)?

22

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

在窗口中有一个画布。窗口是全屏的,但是画布在窗口中心设置为固定的640x480。我需要获取画布内鼠标的位置,而不是窗口内的位置。如何实现?


1
嗯,为什么不实现画布的MouseMove事件呢? - Hans Passant
1
因为事件本身不会呈现值,除了某些情况下的布尔值。 - CodeMouse92
3个回答

57

这行代码不起作用吗?

Point p = Mouse.GetPosition(canvas);

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


嗯,看起来它确实可以,但是尝试使用那些(设置为变量)来设置同一画布上对象的左和上属性却不起作用... - CodeMouse92
找到了问题。解决方案在这个问题的已接受答案的评论中:链接 - CodeMouse92

2

您好,重要的是要注意:

不在窗口上

Canvas 也是窗口的一部分。 以下是一个例子:

  • Window.AllowsTransparency 状态为 true
  • Window.Background 为 #00000000(完全透明)
  • Window.Style 为 None
  • Window.State 为 Maximized
  • 没有控件或元素在窗口上!

... 因此,如果您启动应用程序,将看不到任何东西 现在告诉我如何以像素为单位获取屏幕上的鼠标位置。

!警告!如果您使用 Mouse.GetPosition(this);,每次都会返回 x0 y0


1
是的,如果我需要在 window.MouseButtonUp 事件中执行什么操作,我该怎么做? - Marty

1

所以我通过使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接