假设我有这个 XAML 代码:
<DockPanel Name="pan">
<Label Content="AAA" Name="lab1" />
<Label Content="BBB" Name="lab2" />
<Label Content="CCC" Name="lab3" />
</DockPanel>
我后面的代码我想找出
lab2
的坐标是多少内pan
. 霍威尔我想忽略任何当前的 lab2
RenderTransform | .因此,解决方案必须为上述代码和以下代码返回相同的坐标:<DockPanel>
<Label Content="AAA" />
<Label Content="BBB" >
<Label.RenderTransform>
<TranslateTransform Y="20"/>
</Label.RenderTransform>
</Label>
<Label Content="CCC" />
</DockPanel>
换句话说,我想要由
ArrangeOverride
设置的位置pan
的方法打电话时Arrange
在 but2
.我称之为“逻辑位置”。 '视觉位置'可以通过调用以下方法获得:private Point visualPoss() {
Point lab2Vis = lab2.PointToScreen(new Point(0, 0));
Point panVis = pan.PointToScreen(new Point(0, 0));
return new Point(lab2Vis.X - panVis.X, lab2Vis.Y - panVis.Y);
}
但这不是我的问题的解决方案,因为此
visualPoss()
的返回值不等于上面的两个 XAML 代码示例。如果有什么不清楚的,请发表评论。
谢谢
最佳答案
看起来有一个非常简单明了的解决方案:
private Point logicalPoss() {
Vector vec = VisualTreeHelper.GetOffset(lab2);
return new Point(vec.X, vec.Y);
}
看起来它运行良好。如果您知道场景何时不起作用,请发表评论。
关于.net - WPF:获取子 UIElement 在其父级中的位置。如果有,请忽略 RenderTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760310/