8

假设我有一个 StackPanel 动态填充副本,改变其中元素的 Y 位置。我在 StackPanel 中有一个特定元素,我想在 StackPanel 完成重新定位它的所有子项后找到(相对于 StackPanel 或其他)的 Y 位置。

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 的位置,而不是我的子元素瞄准。

4

2 回答 2

14

只要您正确调用它们,您发布的链接中的方法应该可以正常工作。

您需要使用正确的 UIElement 调用它们 - 在这种情况下,将 element1 用于 RootVisual 将为您提供以下完整位置element1

var transform = element1.TransformToVisual(Application.Current.RootVisual as FrameworkElement);        
Point absolutePosition = transform.Transform(new Point(0, 0));
于 2009-10-02T17:15:34.043 回答
0

对里德回答的一个小注释。

我的 UserControl 有一个 StackPanel。当我打电话给它时它对我不起作用

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    sp.Children.Add(someTextBlock);
    sp.Children.Add(element1);
    sp.Children.Add(element2);

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

当我调用它时它工作

 private void UserControl_LayoutUpdated(object sender, EventArgs e)
        {
         ...
        }

我希望它对某人有所帮助。

于 2022-01-06T23:08:42.320 回答