如何获取 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>
您必须等待 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));
}
如何获取 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>
您必须等待 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));
}