Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Esses exemplos mostram como recuperar o valor de deslocamento de um objeto visual que é relativo a seu pai ou a qualquer ancestral ou descendente.
Exemplo
O exemplo de marcação a seguir mostra um TextBlock definido com valor de Margin igual a 4.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
O exemplo de código a seguir mostra como usar o método GetOffset para recuperar o deslocamento do TextBlock. Os valores de deslocamento estão contidos no valor de Vector retornado.
// 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)
O deslocamento considera o valor de Margin. Nesse caso, X é 4 e Y é 4.
O valor de deslocamento retornado é relativo ao elemento pai do Visual. Se você quiser retornar um valor de deslocamento que não seja relativo ao pai de um Visual, use o método TransformToAncestor.
Obtendo o deslocamento relativo a um ancestral
O exemplo de marcação a seguir mostra um TextBlock aninhado dentro de dois objetos 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>
A ilustração a seguir mostra os resultados da marcação.
TextBlock aninhados em dois StackPanels
O exemplo de código a seguir mostra como usar o método TransformToAncestor para recuperar o deslocamento do TextBlock em relação ao Windowcontido. Os valores de deslocamento estão contidos no valor de GeneralTransform retornado.
// 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))
O deslocamento leva em conta os valores de Margin para todos os objetos dentro do Window que os contém. Nesse caso, X é 28 (16 + 8 + 4) e Y é 28.
O valor de deslocamento retornado é relativo ao ancestral do Visual. Se você quiser retornar um valor de deslocamento que seja relativo a um descendente de um Visual, use o método TransformToDescendant.
Obtendo o deslocamento relativo a um descendente
O exemplo de marcação a seguir mostra um TextBlock contido em um objeto StackPanel.
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
O exemplo de código a seguir mostra como usar o método TransformToDescendant para recuperar o deslocamento do StackPanel em relação ao respectivo TextBlock filho. Os valores de deslocamento estão contidos no valor de GeneralTransform retornado.
// 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))
O deslocamento leva em conta os valores de Margin para todos os objetos. Nesse caso, X é -4 e Y é -4. Os valores de deslocamento são valores negativos, visto que o objeto pai é deslocado negativamente em relação ao respectivo objeto filho.
Consulte também
.NET Desktop feedback