Compartilhar via


Como obter o deslocamento de um visual

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 que é definido com Margin o TextBlock valor de 4.

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

O exemplo de código a seguir mostra como usar o método para recuperar o GetOffset deslocamento do TextBlock. Os valores de deslocamento estão contidos no valor retornado 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)

O deslocamento leva em conta o Margin valor. Neste caso, é 4, X e Y é 4.

O valor de deslocamento retornado é relativo ao pai do Visual. Se você deseja retornar um valor de deslocamento que não é relativo ao pai de um Visual, use o TransformToAncestor método.

Obtendo o deslocamento relativo a um ancestral

O exemplo de marcação a seguir mostra um TextBlock que está aninhado em dois StackPanel objetos.

<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.

Offset values of objects
TextBlock aninhados em dois StackPanels

O exemplo de código a seguir mostra como usar o método para recuperar o TransformToAncestor deslocamento do TextBlock relativo ao que contém Window. Os valores de deslocamento estão contidos no valor retornado 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))

O deslocamento leva em conta os valores de todos os Margin objetos dentro do arquivo Window. Neste 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 relativo ao descendente de um Visual, use o TransformToDescendant método.

Obtendo o deslocamento relativo a um descendente

O exemplo de marcação a seguir mostra um que está contido em um TextBlockStackPanel objeto.

<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 para recuperar o TransformToDescendant deslocamento do StackPanel relativo ao seu filho TextBlock. Os valores de deslocamento estão contidos no valor retornado 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))

O deslocamento leva em conta os valores de todos os Margin objetos. Neste caso, é -4, X e Y é -4. Os valores de deslocamento são valores negativos, visto que o objeto pai é deslocado negativamente em relação ao seu objeto filho.

Confira também