次の XAML コードがあるとします。
<DockPanel Name="pan">
<Label Content="AAA" Name="lab1" />
<Label Content="BBB" Name="lab2" />
<Label Content="CCC" Name="lab3" />
</DockPanel>
私のコードビハインドは、lab2
withinの座標が何であるかを知りたいですpan
。ただし、現在のRenderTransformを無視したいと思いlab2
ます。したがって、ソリューションは上記のコードと次のコードで同じ座標を返す必要があります。
<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 コード例で等しくないため、これは私の問題の解決策ではありません。
何か不明な点があればコメントを残してください。
ありがとうございました