2009-08-07 51 views
1

我有一个StackPanel有N个孩子。我想获得孩子相对于父母StackPanel的x,y坐标。如何确定堆叠面板内物品的坐标?

StackPanel中的孩子水平居中,所以无论何时StackPanel调整大小,孩子都居中。下面是我在做什么让孩子项目相对的的左上角为StackPanel

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

让我们在初始布局说,它给我的回复是点(20,0)。现在布局发生了变化,StackPanel也在扩大,但孩子们仍然居中。我希望现在这种方法能够给我一些像(150,0)的东西,但它仍然给我(20,0)。在视觉上,我可以看到这些物品位于StackPanel的中心,但它仍然给我初始坐标。我究竟做错了什么?

回答

0

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

+0

我改变了代码,使其更难以比拟(我希望)。我得到父容器,然后将孩子的范围翻译成父母的容器 – Micah 2009-08-07 18:44:26

1

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