2009-10-02 10 views
8

Powiedz, że mam StackPanel, który dynamicznie wypełnia się kopią, zmieniając pozycję Y elementów wewnątrz niego. Mam określony element w tym StackPanel, że chcę znaleźć pozycję Y (w stosunku do StackPanel lub w inny sposób) po wykonaniu StackPanel repozycjonowanie wszystkich jego dzieci.Jak uzyskać położenie elementu w 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 

Zauważyłem, że metody takie jak to: http://forums.silverlight.net/forums/p/16787/55881.aspx#55881 nie działają, ponieważ pozycja zwrócony jest pozycja StackPanel a nie element dziecko jestem kierowania.

Odpowiedz

14

Metody w link you posted powinny działać poprawnie, pod warunkiem, że je poprawnie wywołasz.

Trzeba zadzwonić do nich z odpowiednim UIElement - w tym przypadku za pomocą element1 do RootVisual daje pełną pozycję element1:

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

+1. Szukałem na to czasu, słusznie mi się wydaje, że nie podążam za linkiem w pytaniu (dlaczego nienawidzę tego robić?) – AnthonyWJones

+0

pomysł, jak zdobyć pozycję w aplikacji WPF? –

+0

@eranotzap Działa to również w aplikacji WPF. http://msdn.microsoft.com/en-us/library/system.windows.media.visual.transformtovisual.aspx –

Powiązane problemy