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.
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
.NET Desktop feedback