Comment : obtenir le décalage d'un Visual
Mise à jour : novembre 2007
Ces exemples montrent comment récupérer la valeur de décalage d'un objet visuel relative à son parent ou à tout ancêtre ou descendant.
Exemple
L'exemple de balise suivant montre un TextBlock qui est défini avec la valeur Margin de 4.
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
L'exemple de code suivant montre comment utiliser la méthode GetOffset pour récupérer l'offset du TextBlock. Les valeurs de décalage sont contenues dans la valeur Vector renvoyée.
// 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 prend en considération la valeur Margin. Dans ce cas, X est égal à 4 et Y à 4.
La valeur de décalage renvoyée est relative au parent du Visual. Si vous souhaitez renvoyer une valeur de décalage qui n'est pas relative au parent d'un Visual, utilisez la méthode TransformToAncestor.
Obtention de l'offset relatif à un ancêtre
L'exemple de balise suivant montre un TextBlock imbriqué dans deux objets 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>
L'illustration suivante montre les résultats de la balise.
TextBlock imbriqué dans deux StackPanels
L'exemple de code suivant montre comment utiliser la méthode TransformToAncestor pour récupérer l'offset du TextBlock relatif à la Window contenante. Les valeurs de décalage sont contenues dans la valeur GeneralTransform renvoyée.
// 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 prend en considération les valeurs Margin de tous les objets dans la Window contenante. Dans ce cas, X est égal à 28 (16 + 8 + 4) et Y à 28.
La valeur de décalage renvoyée est relative à l'ancêtre du Visual. Si vous souhaitez renvoyer une valeur de décalage relative au descendant d'un Visual, utilisez la méthode TransformToDescendant.
Obtention de l'offset relatif à un descendant
L'exemple de balise suivant montre un TextBlock contenu dans un objet StackPanel.
<StackPanel Name="myStackPanel" Margin="8">
<TextBlock Name="myTextBlock" Margin="4" Text="Hello, world" />
</StackPanel>
L'exemple de code suivant montre comment utiliser la méthode TransformToDescendant pour récupérer l'offset du StackPanel relatif à son TextBlock enfant. Les valeurs de décalage sont contenues dans la valeur GeneralTransform renvoyée.
// 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 prend en considération les valeurs Margin pour tous les objets. Dans ce cas, X est égal à -4 et Y à -4. Les valeurs de décalage sont des valeurs négatives, car l'objet parent est décalé vers les valeurs négatives par rapport à son objet enfant.
Voir aussi
Concepts
Vue d'ensemble du rendu graphique de Windows Presentation Foundation