2009-08-07 6 views
1

J'ai un StackPanel qui a un nombre N d'enfants. Je veux obtenir les coordonnées x, y des enfants par rapport au parent StackPanel.Comment déterminer les coordonnées d'un élément dans un panneau de pile?

Les enfants du StackPanel sont centrés horizontalement. Lorsque le StackPanel est redimensionné, les enfants sont centrés. Voici ce que je fais pour obtenir le coin supérieur gauche de l'enfant par rapport à l'élément StackPanel:

Dim parent = VisualTreeHelper.GetParent(childItem) 
childItem.TranslatePoint(VisualTreeHelper.GetDescendantBounds(childItem).TopLeft, parent) 

Disons que dans la mise en page initiale du point il me donne retour est (20,0). Maintenant, la disposition change et le StackPanel s'élargit, mais les enfants restent centrés. Je m'attendrais maintenant à ce que cette méthode me redonne quelque chose comme (150, 0) mais ça me donne toujours (20,0). Visuellement je peux voir les articles sont au centre du StackPanel, mais ça me donne toujours les coordonnées initiales. Qu'est-ce que je fais mal?

Répondre

0

juste deviner parce que je ne sais pas ce que FindAncestors.FindAncestor fait, mais je devine qu'il retourne le conteneur de l'élément plutôt que centrée horizontalement contenu du récipient. Vous voulez la coordonnée en haut à gauche du contenu, pas le conteneur.

+0

J'ai changé le code pour le rendre plus inconfortable (j'espère). Je reçois le conteneur parent et traduit ensuite les limites de l'enfant à son parent – Micah

1

Je pense que vous devez passer un nouveau point (0,0) à la fonction TranslatePoint. Puisque l'enfant traduit un point dans son espace de coordonnées vers un autre visuel, son coin supérieur gauche est (0,0).

Questions connexes