94

ダブルクリックしたときのウィンドウ/ルート要素に対する要素の絶対位置を取得したいと思います。親内の要素の相対位置は、私が到達できるように見えるすべてであり、到達しようとしているのは、ウィンドウに対する相対的なポイントです。画面上ではなく、ウィンドウ上で要素のポイントを取得する方法の解決策を見てきました。

4

6 に答える 6

138

BrandonSが望んでいるのは、ルート要素に対するマウスの位置ではなく、子孫要素の位置だと思います。

そのために、TransformToAncestorメソッドがあります。

Point relativePoint = myVisual.TransformToAncestor(rootVisual)
                              .Transform(new Point(0, 0));

myVisualダブルクリックしたばかりの要素はどこにあり、 rootVisualApplication.Current.MainWindowまたは任意の相対位置になります。

于 2008-12-22T22:57:45.233 に答える
50

ウィンドウ内の UI 要素の絶対位置を取得するには、次を使用できます。

Point position = desiredElement.PointToScreen(new Point(0d, 0d));

ユーザー コントロール内にいて、そのコントロール内の UI 要素の相対的な位置が必要な場合は、次のようにします。

Point position = desiredElement.PointToScreen(new Point(0d, 0d)),
controlPosition = this.PointToScreen(new Point(0d, 0d));

position.X -= controlPosition.X;
position.Y -= controlPosition.Y;
于 2013-03-21T00:31:33.373 に答える
-1

うーん。クリックしたウィンドウを指定する必要がありますMouse.GetPosition(IInputElement relativeTo) 次のコードは私にとってはうまくいきます

protected override void OnMouseDown(MouseButtonEventArgs e)
    {
        base.OnMouseDown(e);
        Point p = e.GetPosition(this);
    }

独自のクラスからではなく、アプリケーションの他のポイントからウィンドウを参照する必要があると思われます。この場合Application.Current.MainWindow、あなたを助けます。

于 2008-12-22T18:59:51.797 に答える