Condividi tramite


Procedura: ottenere l'offset di un oggetto Visual

Questi esempi illustrano come recuperare il valore di offset di un oggetto visivo relativo al relativo padre o a qualsiasi predecessore o discendente.

Esempio

Nell'esempio di markup seguente viene illustrato un oggetto TextBlock definito con Margin il valore 4.

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

Nell'esempio di codice seguente viene illustrato come utilizzare il GetOffset metodo per recuperare l'offset dell'oggetto TextBlock. I valori di offset sono contenuti all'interno del valore restituito 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)

L'offset tiene conto del Margin valore. In questo caso, X è 4 e Y è 4.

Il valore di offset restituito è relativo all'elemento padre dell'oggetto Visual. Se si desidera restituire un valore di offset non relativo all'elemento padre di un Visualoggetto , utilizzare il TransformToAncestor metodo .

Recupero dell'offset relativo a un predecessore

Nell'esempio di markup seguente viene illustrato un TextBlock oggetto annidato all'interno di due StackPanel oggetti .

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

La figura seguente mostra i risultati del markup.

Offset values of objects
TextBlock annidato all'interno di due StackPanel

Nell'esempio di codice seguente viene illustrato come utilizzare il TransformToAncestor metodo per recuperare l'offset dell'oggetto TextBlock relativo all'oggetto contenitore Window. I valori di offset sono contenuti all'interno del valore restituito 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))

L'offset tiene conto dei Margin valori per tutti gli oggetti all'interno dell'oggetto contenitore Window. In questo caso, X è 28 (16 + 8 + 4) e Y è 28.

Il valore di offset restituito è relativo al predecessore di Visual. Se si desidera restituire un valore di offset relativo al discendente di un Visualoggetto , utilizzare il TransformToDescendant metodo .

Recupero dell'offset relativo a un discendente

Nell'esempio di markup seguente viene illustrato un TextBlock oggetto contenuto all'interno di un StackPanel oggetto .

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

Nell'esempio di codice seguente viene illustrato come utilizzare il TransformToDescendant metodo per recuperare l'offset dell'oggetto StackPanel relativo al relativo elemento figlio TextBlock. I valori di offset sono contenuti all'interno del valore restituito 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))

L'offset tiene conto dei Margin valori per tutti gli oggetti. In questo caso, X è -4 e Y è -4. I valori di offset sono valori negativi, poiché l'oggetto padre è un offset negativo rispetto al relativo oggetto figlio.

Vedi anche