다음을 통해 공유


방법: 시각적 요소의 오프셋 가져오기

이 예제에서는 부모 또는 모든 상위나 하위에 상대적인 시각적 개체의 오프셋 값을 검색하는 방법을 보여 줍니다.

예제

다음 태그 예제에서는 Margin 값이 4로 정의된 TextBlock을 보여 줍니다.

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

다음 코드 예제에서는 GetOffset 메서드를 사용하여 TextBlock의 오프셋을 검색하는 방법을 보여 줍니다. 오프셋 값은 반환된 Vector 값에 포함되어 있습니다.

            ' Return the offset vector for the TextBlock object.
            Dim vector As Vector = VisualTreeHelper.GetOffset(myTextBlock)

            ' Convert the vector to a point value.
            Dim currentPoint As New Point(vector.X, vector.Y)
// 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 메서드를 사용합니다.

상위에 상대적인 오프셋 가져오기

다음 태그 예제에서는 두 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>

다음 그림에서는 태그의 결과를 보여 줍니다.

두 StackPanel 안에 중첩된 TextBlock

개체의 오프셋 값

다음 코드 예제에서는 TransformToAncestor 메서드를 사용하여 포함 Window에 상대적인 TextBlock의 오프셋을 검색하는 방법을 보여 줍니다. 오프셋 값은 반환된 GeneralTransform 값에 포함되어 있습니다.

            ' Return the general transform for the specified visual object.
            Dim generalTransform1 As GeneralTransform = myTextBlock.TransformToAncestor(Me)

            ' Retrieve the point value relative to the parent.
            Dim currentPoint As Point = generalTransform1.Transform(New Point(0, 0))
// 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 메서드를 사용하여 자식 TextBlock을 기준으로 StackPanel의 오프셋을 검색하는 방법을 보여 줍니다. 오프셋 값은 반환된 GeneralTransform 값에 포함되어 있습니다.

            ' Return the general transform for the specified visual object.
            Dim generalTransform1 As GeneralTransform = myStackPanel.TransformToDescendant(myTextBlock)

            ' Retrieve the point value relative to the child.
            Dim currentPoint As Point = generalTransform1.Transform(New Point(0, 0))
// 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입니다. 부모 개체가 자식 개체에 대해 음의 방향으로 오프셋되므로 오프셋 값은 음수 값입니다.

참고 항목

참조

Visual

VisualTreeHelper

개념

WPF 그래픽 렌더링 개요