2009-08-07 6 views
1

Ich habe eine StackPanel, die N-Anzahl von Kindern hat. Ich möchte die x, y Koordinaten der Kinder relativ zum Elternteil StackPanel erhalten.Wie ermittle ich die Koordinaten eines Artikels innerhalb eines Stackpanels?

Die Kinder in der StackPanel sind horizontal zentriert, also wenn die StackPanel Größen die Kinder zentriert werden. Hier ist, was ich tue die TopLeft Ecke des Kindes Artikel in Bezug auf die StackPanel zu erhalten:

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

Sagen wir im ersten Layout der Punkt es gibt mir zurück ist (20,0). Jetzt ändert sich das Layout und die StackPanel erweitert sich, aber die Kinder bleiben zentriert. Ich würde erwarten, dass diese Methode mir jetzt etwas zurück gibt wie (150, 0), aber es gibt mir immer noch (20,0). Visuell kann ich sehen, dass die Elemente in der Mitte der StackPanel sind, aber es gibt mir immer noch die Anfangskoordinaten. Was mache ich falsch?

Antwort

0

raten Nur weil ich nicht weiß, was FindAncestors.FindAncestor tut, aber ich vermute, es den Container des Elements zurück, anstatt Inhalt des Behälters horizontal zentriert. Sie möchten die obere linke Koordinate des Inhalts, nicht den Container.

+0

Ich habe den Code geändert, um ihn verständlicher zu machen (hoffe ich). Ich erhalte den übergeordneten Container und übersetze dann die Grenzen des Kindes in den übergeordneten Container – Micah

1

Ich denke, Sie müssen einen neuen Punkt (0,0) an die TranslatePoint-Funktion übergeben. Da das Kind einen Punkt in seinem Koordinatenraum in ein anderes Bild übersetzt, ist seine obere linke Ecke (0,0).