2009-10-02 14 views
8

Supponiamo di avere uno StackPanel riempito in modo dinamico con la copia, modificando la posizione Y degli elementi al suo interno. Ho uno specifico elemento all'interno di StackPanel che voglio trovare la posizione Y di (relativa allo StackPanel o altro) dopo che lo StackPanel è stato fatto riposizionando tutti i suoi figli.Come ottenere la posizione di un elemento in uno StackPanel?

StackPanel sp = new StackPanel(); 
sp.Children.Add(someTextBlock); 
sp.Children.Add(element1); 
sp.Children.Add(element2); 
... 
someTextBlock.Text = "Lorem ipsum dolor..." // some text that pushes children of > index down 
// element1 got pushed down to some unknown position based on text length 
// now want to find the Y position of element1 

ho notato che i metodi come questo: http://forums.silverlight.net/forums/p/16787/55881.aspx#55881 non funzionano in quanto la posizione restituita è la posizione del StackPanel e non l'elemento figlio che sto targeting.

risposta

14

I metodi nello link you posted dovrebbero funzionare correttamente, a condizione che vengano chiamati correttamente.

è necessario chiamare loro con l'UIElement corretto - in questo caso, utilizzando element1 al RootVisual vi darà la posizione piena di element1:

var transform = element1.TransformToVisual(Application.Current.RootVisual as FrameworkElement);   
Point absolutePosition = transform.Transform(new Point(0, 0)); 
+0

+1. Stavo cercando anni per quello, mi serve proprio per non seguire effettivamente il link nella domanda (perché odio farlo?) – AnthonyWJones

+0

qualche idea su come ottenere la posizione in un'applicazione WPF come bene? –

+0

@eranotzap Funziona anche con un'applicazione WPF. http://msdn.microsoft.com/en-us/library/system.windows.media.visual.transformtovisual.aspx –

Problemi correlati