How to: Get the Offset of a Visual
これらの例は、その親またはどんな祖先でもまたは子孫と比較してあるビジュアル・オブジェクトのオフセット値を取り出す方法を示します。
例
Example
次のマークアップの例は、4のMargin値で定義されるTextBlockを表します。
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
次のコードの例は、TextBlockのオフセットを取り出すために、どのように、GetOffsetメソッドを使用するかを示します。オフセット値は、返されたVector値に含まれます。
// Return the offset vector for the TextBlock object.
// TextBlockオブジェクトのオフセット・ベクトルを返します。
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の親を基準にしています。あなたが、オフセット値を返したい場合、TransformToAncestorメソッドを使用する、Visualの親とは関係ありません。
継承元と比較してOffsetを取得する
Getting the Offset Relative to an Ancestor
次のマークアップの例は、2つのStackPanelオブジェクトの中で入れ子にされる、TextBlockを示しています。
次の図は、マークアップの結果を表します。
次のコードの例は、含まれているWindowを基準として、TextBlockのオフセットを取り出すために、TransformToAncestorメソッドを、どのように、使用するかを示します。オフセット値は、返された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の継承元を基準にしています。あなたが、オフセット値を返したい場合、TransformToDescendantメソッドを使用して、Visualの子孫に相対的です。
子孫と比較してOffsetを取得する
Getting the Offset Relative to a Descendant
次のマークアップの例は、StackPanelオブジェクトの中に含まれるTextBlockを示しています。
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
次のコードの例は、その子のTextBlockと比較して、StackPanelのオフセットを取り出すために、どのように、TransformToDescendantメソッドを使用するかを示します。オフセット値は、返された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です。オフセット値は、親オブジェクトは、子オブジェクトに対して、負にオフセットされているため、負の値です。