2009-10-02 25 views
8

Angenommen, ich habe ein StackPanel, das dynamisch mit einer Kopie gefüllt wird und die Y-Position der darin enthaltenen Elemente ändert. Ich habe ein bestimmtes Element in diesem StackPanel, das ich die Y-Position von (relativ zu dem StackPanel oder anders) finden möchte, nachdem das StackPanel getan hat, alle seine Kinder neu zu positionieren.Wie bekomme ich die Position eines Elements in einem 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 

Ich bemerkte, dass Methoden wie folgt aus: http://forums.silverlight.net/forums/p/16787/55881.aspx#55881 nicht funktionieren, da die Position der Position des Stackpanel und nicht das Kind Element Ich bin Targeting zurückgekehrt ist.

Antwort

14

Die Methoden in der link you posted sollte gut funktionieren, vorausgesetzt, Sie rufen sie richtig.

Sie müssen sie mit dem richtigen UIElement nennen - in diesem Fall auf die RootVisual mit element1 erhalten Sie die volle Position element1 geben:

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

+1. Ich habe ewig danach gesucht, dient mir richtig, den Link in der Frage nicht wirklich zu folgen (warum hasse ich das tun?) – AnthonyWJones

+0

eine Idee, wie man die Position in einer WPF-Anwendung auch bekommen? –

+0

@eranotzap Dies funktioniert auch in einer WPF-Anwendung. http://msdn.microsoft.com/en-us/library/system.windows.media.visual.transformtovisual.aspx –

Verwandte Themen