次の方法で共有


方法 : ビジュアルのオフセットを取得する

更新 : 2007 年 11 月

この例では、親、先祖、または子孫を基準とした相対値である、ビジュアル オブジェクトのオフセット値を取得する方法を示します。

使用例

次に示すマークアップの例では、TextBlockMargin の値に 4 が指定されています。

<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />

GetOffset メソッドを使用して TextBlock のオフセットを取得する方法を次のコード例に示します。オフセット値は、返される Vector 値に格納されています。

// Return the offset vector for the TextBlock object.
Vector vector = VisualTreeHelper.GetOffset(myTextBlock);

// Convert the vector to a point value.
Point currentPoint = new Point(vector.X, vector.Y);

オフセットでは、Margin 値が考慮されます。ここでは、X は 4 で、Y も 4 です。

返されるオフセット値は、Visual の親を基準とする相対値です。Visual の親が基準ではないオフセット値を返す必要がある場合は、TransformToAncestor メソッドを使用します。

先祖を基準としたオフセットの取得

2 つの StackPanel オブジェクトの中で入れ子になっている TextBlock のマークアップ例を次に示します。

<Window xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" >
  <StackPanel Margin="16">
    <StackPanel Margin="8">
      <TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
    </StackPanel>
  </StackPanel>
</Window>

マークアップの結果を次の図に示します。

2 つの StackPanel 内で入れ子にされた TextBlock
オブジェクトのオフセット値

TransformToAncestor メソッドを使用して、TextBlock のオフセットを、このオブジェクトを格納している Window を基準として取得する方法を次のコード例に示します。オフセット値は、返される GeneralTransform 値に格納されています。

// Return the general transform for the specified visual object.
GeneralTransform generalTransform1 = myTextBlock.TransformToAncestor(this);

// Retrieve the point value relative to the parent.
Point currentPoint = generalTransform1.Transform(new Point(0, 0));

オフセットの値は、そのオブジェクトを格納している Window 内のすべてのオブジェクトの Margin 値を考慮して計算されます。この例では、X は 28 (16 + 8 + 4) で、Y も 28 です。

返されるオフセット値は、Visual の先祖を基準としています。Visual の子孫を基準とするオフセット値を返す必要がある場合は、TransformToDescendant メソッドを使用します。

子孫を基準としたオフセットの取得

StackPanel オブジェクトに格納されている TextBlock のマークアップ例を次に示します。

<StackPanel Name="myStackPanel" Margin="8">
  <TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>

TransformToDescendant メソッドを使用して、StackPanel のオフセットを、自身の子 TextBlock を基準として取得する方法を次のコード例に示します。オフセット値は、返される GeneralTransform 値に格納されています。

// Return the general transform for the specified visual object.
GeneralTransform generalTransform1 = myStackPanel.TransformToDescendant(myTextBlock);

// Retrieve the point value relative to the child.
Point currentPoint = generalTransform1.Transform(new Point(0, 0));

オフセット値は、すべてのオブジェクトの Margin 値を考慮して計算されます。この例では、X は -4 で、Y も -4 です。オフセット値が負の値であるのは、子オブジェクトを基準とした親オブジェクトのオフセットは負のオフセットであるからです。

参照

概念

Windows Presentation Foundation のグラフィックス レンダリングの概要

参照

Visual

VisualTreeHelper