假设我有以下 XAML 代码:
<DockPanel Name="pan">
<Label Content="AAA" Name="lab1" />
<Label Content="BBB" Name="lab2" />
<Label Content="CCC" Name="lab3" />
</DockPanel>
我的代码后面我想找出坐标是什么lab2
within pan
. Hovewer我想忽略任何当前的 RenderTransformlab2
。因此,解决方案必须为上述代码和以下代码返回相同的坐标:
<DockPanel>
<Label Content="AAA" />
<Label Content="BBB" >
<Label.RenderTransform>
<TranslateTransform Y="20"/>
</Label.RenderTransform>
</Label>
<Label Content="CCC" />
</DockPanel>
换句话说,我想要由ArrangeOverride
的方法pan
打电话时Arrange
on 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);
}
看起来效果很好。如果您知道该方案何时不起作用,请发表评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)