如何确定堆栈面板中项目的坐标?

时间:2009-08-07 17:57:41

标签: wpf stackpanel

我有一个StackPanel,有N个孩子。我想得到孩子相对于父StackPanel的x,y坐标。

StackPanel中的孩子水平居中,因此只要StackPanel调整大小,孩子就会居中。这是我正在做的事情,以获得相对于StackPanel的子项的TopLeft角:

Dim parent = VisualTreeHelper.GetParent(childItem)
childItem.TranslatePoint(VisualTreeHelper.GetDescendantBounds(childItem).TopLeft, parent)

让我们说在初始布局中它给我回来的点是(20,0)。现在布局发生了变化,StackPanel变宽了,但是孩子们仍然居中。我希望这个方法现在给我一些回复(150,0),但它仍然给我(20,0)。在视觉上我可以看到项目位于StackPanel的中心,但它仍然给我初始坐标。我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为你需要将新的Point(0,0)传递给TranslatePoint函数。由于孩子将其坐标空间中的一个点转换为另一个视觉,因此其左上角为(0,0)。

答案 1 :(得分:0)

猜测是因为我不知道FindAncestors.FindAncestor做了什么,但我猜它会返回项目的容器,而不是水平居中的内容容器。您需要内容的左上角坐标,而不是容器。