web-dev-qa-db-ja.com

キャンバス上でマウスの位置を取得しますか(ウィンドウ上ではありません)?

WPF 4とvb.net 2010にプロジェクトがあります。

窓の中にキャンバスがあります。ウィンドウは全画面表示ですが、キャンバスはウィンドウの中央が塗りつぶされた640x480に設定されています。キャンバス内でマウスの位置を取得する必要がありますが、ウィンドウ内では取得できません。どうすればよいですか?

17
CodeMouse92

これは機能しませんか?

Point p = Mouse.GetPosition(canvas);

マウスポインターの位置は、指定された要素を基準にして計算されます。要素の左上隅が原点です。

48
H.B.

こんにちは重要なことは

窓にはない

キャンバスもウィンドウの一部です。一例:

  • window.AllowsTransparency状態がtrueになっている
  • window.Backgroundは#00000000(完全に透明)
  • window.StyleはNoneです
  • window.Stateが最大化され、
  • ウィンドウにコントロールや要素はありません!

...したがって、アプリケーションを起動すると、画面上のマウスの位置をピクセル単位で取得する方法が表示されません。

!警告!Mouse.GetPosition(this);を使用すると、毎回x0 y0が返されます

2
Phillip

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
1
Phillip