Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
In questi esempi viene mostrato come recuperare il valore di offset di un oggetto Visual relativo al padre o a qualsiasi predecessore o discendente.
Esempio
Nell'esempio di markup seguente viene mostrato un oggetto TextBlock definito con un valore Margin pari a 4.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
Nell'esempio di codice seguente viene mostrato come utilizzare il metodo GetOffset per recuperare l'offset di TextBlock. I valori di offset sono contenuti all'interno del valore Vector restituito.
// 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);
L'offset prende in considerazione il valore Margin. In questo caso, X e Y sono pari a 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 dell'oggetto Visual, utilizzare il metodo TransformToAncestor.
Acquisizione dell'offset relativo a un predecessore
Nell'esempio di markup seguente viene mostrato un oggetto TextBlock nidificato all'interno di due oggetti StackPanel.
<Window xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" >
<StackPanel Margin="16">
<StackPanel Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
</StackPanel>
</Window>
Nella figura seguente vengono illustrati i risultati del markup.
TextBlock nidificato all'interno di due StackPanel
.png)
Nell'esempio di codice seguente viene mostrato come utilizzare il metodo TransformToAncestor per recuperare l'offset dell'oggetto TextBlock relativo all'oggetto Window che lo contiene. I valori di offset sono contenuti all'interno del valore GeneralTransform restituito.
// 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));
L'offset prende in considerazione i valori Margin per tutti gli oggetti all'interno dell'oggetto Window che li contiene. In questo caso, X è pari a 28 (16 + 8 + 4) e Y è pari a 28.
Il valore di offset restituito è relativo al predecessore dell'oggetto Visual. Se si desidera restituire un valore di offset relativo al discendente di Visual, utilizzare il metodo TransformToDescendant.
Acquisizione dell'offset relativo a un discendente
Nell'esempio di markup seguente viene mostrato un oggetto TextBlock contenuto all'interno di un oggetto StackPanel.
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
Nell'esempio di codice seguente viene mostrato come utilizzare il metodo TransformToDescendant per recuperare l'offset di StackPanel relativo all'oggetto TextBlock figlio. I valori di offset sono contenuti all'interno del valore GeneralTransform restituito.
// 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));
L'offset prende in considerazione i valori Margin per tutti gli oggetti. In questo caso, X e Y sono pari a -4. I valori di offset sono valori negativi, poiché l'oggetto padre viene spostato negativamente rispetto all'oggetto figlio.
Vedere anche
Concetti
Cenni preliminari sul rendering della grafica in Windows Presentation Foundation