如何获取 WrapPanel 中元素的坐标?

How can I get the coordinates of an element within a WrapPanel?

如何获取 WrapPanel 中元素的坐标? 我已经尝试过 myElementInsidenList.TransformToAncestor(root View).Transform(new Point(0, 0)) 但没有用。

            <ScrollViewer x:Name="myScrollViewer" Background="#2B2B2B" VerticalScrollBarVisibility="Auto">
                <ScrollViewer.Template>
                    <ControlTemplate TargetType="ScrollViewer">
                        <Border CornerRadius="12" Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="Top" HorizontalAlignment="Left" />
                        </Border>
                    </ControlTemplate>
                </ScrollViewer.Template>
                <WrapPanel x:Name="nList" VerticalAlignment="Top" />
            </ScrollViewer>

More context

您必须等待 Visual 元素呈现。否则无位置可取。

另请注意,您的 doAnimationAndAddValue() 方法必须 return 一个 Task 而不是 void,如果它是一个 async 方法而不是事件处理程序。

只需监听FrameworkElement.Loaded事件:

async Task doAnimationAndAddValue()
{
  TextBox targetInput = CloneXaml(cloneInputForAnimation);
  nList.Children.Add(targetInput);
  targetInput.Loaded += OnTargetInputLoaded;
}

private void OnTargetInputLoaded(object sender, EventArgs e)
{
  var targetInput = sender as FrameworkElement;
  targetInput.Loaded -= OnTargetInputLoaded;

  Point targetPositionRelativeToWrapPanel = 
    targetInput.TransformToVisual(this.nList).Transform(new Point(0, 0));

  Point targetPositionRelativeToMainWindow = 
    targetInput.TransformToVisual(this).Transform(new Point(0, 0));
}