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

时间:2011-04-17 00:50:07

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

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

我在窗户内有画布。窗口是全屏,但画布在窗口中央设置为实心640x480。我需要在画布内部获取鼠标位置,但不要在窗口内部。我该怎么做?

3 个答案:

答案 0 :(得分:43)

这不起作用吗?

Point p = Mouse.GetPosition(canvas);
  

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

答案 1 :(得分:2)

嗨重要的是

  

不在窗口

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

  • Window.AllowsTransparency状态为true
  • Window.Background是#00000000(完全透明)
  • Window.Style为None
  • Window.State已最大化且
  • 窗户上没有任何控件或元素!

... 因此,如果您启动该应用程序,您将看到Nothing 现在告诉我如何在像素

的屏幕上获得鼠标位置

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

答案 2 :(得分: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