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