Jak uzyskać przesunięcie obiektu wizualnego
W tych przykładach pokazano, jak pobrać wartość przesunięcia obiektu wizualnego względem jego rodzica lub dowolnego przodka albo potomka.
Przykład
W poniższym przykładzie znaczników przedstawiono TextBlock, który jest zdefiniowany z wartością Margin równą 4.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
Poniższy przykład kodu pokazuje, jak użyć metody GetOffset w celu uzyskania przesunięcia TextBlock. Wartości przesunięcia są zawarte w zwróconej wartości 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);
' 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 wartość Margin. W takim przypadku X wynosi 4, a Y to 4.
Zwrócona wartość przesunięcia jest względna względem elementu nadrzędnego Visual. Jeśli chcesz zwrócić wartość przesunięcia, która nie jest względna względem elementu nadrzędnego Visual, użyj metody TransformToAncestor.
Pobieranie przesunięcia względem przodka
Poniższy przykład znaczników przedstawia TextBlock zagnieżdżony w dwóch obiektach StackPanel.
<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 oznaczeń.
TextBlock zagnieżdżony w dwóch StackPanelach
Poniższy przykład kodu pokazuje, jak użyć metody TransformToAncestor w celu pobrania przesunięcia TextBlock względem zawierającego Window. Wartości przesunięcia są zawarte w zwróconej wartości 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));
' 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 wartości Margin dla wszystkich obiektów znajdujących się w Window. W tym przypadku X wynosi 28 (16 + 8 + 4), a Y wynosi 28.
Zwrócona wartość przesunięcia odnosi się do przodka Visual. Jeśli chcesz zwrócić wartość przesunięcia względną dla elementu potomnego Visual, użyj metody TransformToDescendant.
Pobieranie przesunięcia względem potomka
Poniższy przykład znaczników przedstawia TextBlock, który jest zawarty w obiekcie StackPanel.
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
Poniższy przykład kodu pokazuje, jak użyć metody TransformToDescendant w celu uzyskania przesunięcia StackPanel względem jego elementu podrzędnego TextBlock. Wartości przesunięcia są zawarte w otrzymanej wartości 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));
' 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 wartości Margin dla wszystkich obiektów. W tym przypadku X wynosi -4, a Y to -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ż
.NET Desktop feedback