2009-08-07 55 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)。