Home > C# > 目的別資料 > Visualレイヤー・プログラミング > msdnドキュメント > 方法:VisualのOffsetを取得する

方法:VisualのOffsetを取得する

新規作成日 2020-10-09
最終更新日

How to: Get the Offset of a Visual

これらの例は、その親またはどんな祖先でもまたは子孫と比較してあるビジュアル・オブジェクトのオフセット値を取り出す方法を示します。

Example

次のマークアップの例は、4のMargin値で定義されるTextBlockを表します。

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

次のコードの例は、TextBlockのオフセットを取り出すために、どのように、GetOffsetメソッドを使用するかを示します。オフセット値は、返されたVector値に含まれます。

C#
// 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を示しています。

次の図は、マークアップの結果を表します。

TextBlockは、2つのStackPanelsの中で入れ子にされます。
TextBlockは、2つのStackPanelsの中で入れ子にされます。

次のコードの例は、含まれているWindowを基準として、TextBlockのオフセットを取り出すために、TransformToAncestorメソッドを、どのように、使用するかを示します。オフセット値は、返されたGeneralTransform値に含まれています。

C#
// 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を示しています。

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

次のコードの例は、その子のTextBlockと比較して、StackPanelのオフセットを取り出すために、どのように、TransformToDescendantメソッドを使用するかを示します。オフセット値は、返されたGeneralTransform値に含まれています。

C#
// 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です。オフセット値は、親オブジェクトは、子オブジェクトに対して、負にオフセットされているため、負の値です。

こちらもご覧ください

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」