Получить положение мыши на холсте (но не на окне)? - PullRequest
17 голосов
/ 17 апреля 2011

У меня есть проект в WPF 4 и vb.net 2010.

У меня есть холст внутри окна. Окно полноэкранное, но в центре окна холст установлен в сплошном 640x480. Мне нужно получить положение мыши внутри холста, но НЕ внутри окна. Как мне это сделать?

Ответы [ 3 ]

45 голосов
/ 17 апреля 2011

Разве это не работает?

Point p = Mouse.GetPosition(canvas);

Положение указателя мыши вычисляется относительно указанного элемента, причем левый верхний угол элемента является точкой происхождения,

2 голосов
/ 28 марта 2013

Привет, важная вещь - это

НЕ в окне

холст также является частью окна.один пример:

  • состояние Window.AllowsTransparency имеет значение true
  • Window.Background равно # 00000000 (полностью прозрачный)
  • Window.Style - None
  • Window.State развернуто и
  • в окне НЕТ элементов управления или элементов!

... поэтому, если вы запустите приложение, вы ничего не увидитетеперь подскажите, как получить положение мыши на экране в пикселях

! Внимание!если вы используете jose Mouse.GetPosition(this);, то каждый раз будет возвращаться x0 y0

1 голос
/ 31 октября 2014

, поэтому я решил проблему с помощью 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
...