Udostępnij za pośrednictwem


Jak pobrać przesunięcie Visual

W tych przykładach pokazano, jak pobrać wartość przesunięcia obiektu wizualizacji względem jego obiektu nadrzędnego lub dowolnego obiektu nadrzędnego lub obiektu potomnego.

Przykład

Poniższy przykład znaczników przedstawia zdefiniowany element TextBlock o Margin wartości 4.

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

W poniższym przykładzie kodu pokazano, jak użyć GetOffset metody w celu pobrania przesunięcia TextBlock. Wartości przesunięcia są zawarte w zwróconej Vector wartości.

// 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);
' 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)

Przesunięcie uwzględnia Margin wartość. W tym przypadku wartość X wynosi 4 i Y ma wartość 4.

Zwrócona wartość przesunięcia jest względna względem elementu nadrzędnego elementu Visual. Jeśli chcesz zwrócić wartość przesunięcia, która nie jest względna względem elementu nadrzędnego elementu Visual, użyj TransformToAncestor metody .

Pobieranie przesunięcia względem przodka

Poniższy przykład znaczników przedstawia TextBlock obiekt zagnieżdżony w dwóch StackPanel obiektach.

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

Na poniższej ilustracji przedstawiono wyniki znaczników.

Offset values of objects
TextBlock zagnieżdżony w dwóch stosPanelach

W poniższym przykładzie kodu pokazano, jak użyć TransformToAncestor metody w celu pobrania przesunięcia względem TextBlock pliku zawierającego Window. Wartości przesunięcia są zawarte w zwróconej GeneralTransform wartości.

// 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));
' 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))

Przesunięcie uwzględnia Margin wartości dla wszystkich obiektów w pliku zawierającym Window. W tym przypadku X wartość to 28 (16 + 8 + 4) i Y ma wartość 28.

Zwrócona wartość przesunięcia jest względna względem przodka obiektu Visual. Jeśli chcesz zwrócić wartość przesunięcia względną dla elementu potomnego obiektu Visual, użyj TransformToDescendant metody .

Pobieranie przesunięcia względem elementu potomnego

Poniższy przykład znaczników przedstawia obiekt TextBlock zawarty w StackPanel obiekcie.

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

Poniższy przykład kodu pokazuje, jak użyć TransformToDescendant metody w celu pobrania przesunięcia względem elementu podrzędnego StackPanelTextBlock. Wartości przesunięcia są zawarte w zwróconej GeneralTransform wartości.

// 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));
' 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))

Przesunięcie uwzględnia Margin wartości wszystkich obiektów. W tym przypadku X wartość to -4 i Y wynosi -4. Wartości przesunięcia to wartości ujemne, ponieważ obiekt nadrzędny jest ujemnie przesunięty względem jego obiektu podrzędnego.

Zobacz też