1

現在、特定の X、Y 座標を持つアイテムを含むユーザー コントロールがあり、それらのポイントがどこにある必要があるかに制限があります。この場合、それらの位置は 0 > X > 40 および 0 > Y > 80 (40x80) です。これらのアイテムをホストしているコントロールは動的ですが、ウィンドウ サイズに基づいて特定の縦横比を持っています。これらの X & Y 座標をユーザー コントロール内の相対位置に変換する必要があります。どんな助けでも大歓迎です!前もって感謝します!それが重要/役立つ場合は、Silverlight を使用しています。

4

1 に答える 1

4

GeneralTransform を使用して、コンテナに対する UIElement の位置を決定できます。ここにスニペットがあります:

    /// <summary>
    /// Gets the position of the specified element's top left corner, relative to the specified container.
    /// </summary>
    /// <param name="element"></param>
    /// <param name="container"></param>
    public static Point GetPosition(UIElement element, UIElement container)
    {
        if (element == null)
            throw new ArgumentNullException("element");
        if (container == null)
            throw new ArgumentNullException("container");
        var gt = element.TransformToVisual(container);
        var position = gt.Transform(new Point(0, 0));
        return position;
    }

乾杯、アレックス

[編集] 実際、null の「コンテナー」をチェックする必要はありません。TransformToVisual は null もパラメーターとして受け入れます。別の問題: TransformToVisual は ArgumentException をスローします。たとえば、「要素」が表示されていない場合、現在ビジュアル ツリーにない場合などです。残念ながら、TransformToVisual が実際に "エレメント"。だから私は単純に TransformToVisual への呼び出しを try-catch ブロックでラップし、ArgumentException を飲み込みました。

于 2010-06-28T12:21:19.660 に答える