如果有一个Canvas父级,很容易获得一个孩子的位置:
Canvas.GetLeft/Top (child)
Run Code Online (Sandbox Code Playgroud)
但是,如何才能让其他类型的父母获得孩子的位置?
假设我有这个XAML代码:
<DockPanel Name="pan">
<Label Content="AAA" Name="lab1" />
<Label Content="BBB" Name="lab2" />
<Label Content="CCC" Name="lab3" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
我在我后面的代码我想找出是什么的坐标lab2范围内pan.Hovewer我想忽略任何现有的RenderTransform lab2.因此,解决方案必须返回上述代码的相同坐标,并遵循:
<DockPanel>
<Label Content="AAA" />
<Label Content="BBB" >
<Label.RenderTransform>
<TranslateTransform Y="20"/>
</Label.RenderTransform>
</Label>
<Label Content="CCC" />
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
换句话说我想这是在设定的位置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);
}
Run Code Online (Sandbox Code Playgroud)
但这不是我的问题的解决方案,因为visualPoss()对于上面的两个XAML代码示例,它的返回值不相等.
如果不清楚,请留下评论.
谢谢