Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этих примерах показано, как получить значение смещения визуального объекта, относящееся к родительскому объекту или любому предку или потомку.
Пример
В следующем примере разметки показано определение TextBlock со значением Margin, равным 4.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
В следующем примере кода показано, как использовать метод GetOffset для получения смещения TextBlock. Значения смещения содержатся в значении 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)
Смещение учитывает значение Margin. В этом случае X равно 4, а Y — 4.
Возвращаемое значение смещения относительно родителя элемента Visual. Если вы хотите вернуть значение смещения, не относящееся к родительскому элементу Visual, используйте метод TransformToAncestor.
Получение смещения относительно предка
В следующем примере разметки показан TextBlock, вложенный в два объекта 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>
На следующем рисунке показаны результаты разметки.
TextBlock, вложенный в два StackPanels
В следующем примере кода показано, как использовать метод TransformToAncestor для получения смещения TextBlock относительно содержащего Window. Значения смещения содержатся в значении 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))
Смещение учитывает значения Margin для всех объектов, содержащих Window. В этом случае X составляет 28 (16 + 8 + 4), а Y — 28.
Возвращаемое значение смещения указано относительно предка элемента Visual. Если вы хотите вернуть значение смещения относительно потомка Visual, используйте метод TransformToDescendant.
Получение смещения относительно потомка
В следующем примере разметки показан TextBlock, содержащийся в объекте StackPanel.
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
В следующем примере кода показано, как использовать метод TransformToDescendant для получения смещения StackPanel относительно его дочернего TextBlock. Значения смещения содержатся в значении 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))
Смещение учитывает значения Margin для всех объектов. В этом случае X равно -4, а Y — -4. Значения смещения являются отрицательными значениями, так как родительский объект отрицательно смещается относительно дочернего объекта.
См. также
.NET Desktop feedback