2009-10-02 22 views
8

说我有一个StackPanel,获取动态充满副本,改变其中的元素的Y位置。我在StackPanel中有一个特定的元素,我想在StackPanel重新定位它的所有子元素之后找到Y的位置(相对于StackPanel或其他)。如何获取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 

我注意到,这样的方法:http://forums.silverlight.net/forums/p/16787/55881.aspx#55881不工作,因为返回的位置是StackPanel中的位置,而不是子元素,我瞄准。

回答

14

link you posted中的方法应该可以正常工作,前提是您调用了正确的方法。

你需要给他们打电话与正确的UIElement - 在这种情况下,使用部件1至RootVisual会给你的element1满仓:

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

+1。我一直在寻找这样的年龄,为我提供了一个不错的选择,因为我并没有遵循问题中的链接(为什么我讨厌这样做?) – AnthonyWJones 2009-10-02 20:36:08

+0

任何想法如何在WPF应用程序中获得位置? – 2013-03-29 22:12:58

+0

@eranotzap这也适用于WPF应用程序。 http://msdn.microsoft.com/en-us/library/system.windows.media.visual.transformtovisual.aspx – 2013-03-29 22:46:45