1

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

中的子StackPanel级水平居中,因此每当StackPanel调整大小时,子级居中。以下是我为获取子项相对于的 TopLeft 角所做的操作StackPanel

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

假设在初始布局中它给我的点是 (20,0)。现在布局发生了变化并且StackPanel变宽了,但孩子们仍然居中。我希望这种方法现在能给我一些类似 (150, 0) 的东西,但它仍然给我 (20,0)。从视觉上我可以看到这些项目位于 的中心StackPanel,但它仍然给了我初始坐标。我究竟做错了什么?

4

2 回答 2

1

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

于 2009-08-07T19:56:42.913 回答
0

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

于 2009-08-07T18:36:48.177 回答