Как определить координаты элемента в панели стека? - PullRequest
1 голос
/ 07 августа 2009

У меня есть 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, но он все еще дает мне начальные координаты. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Я думаю, вам нужно передать новую точку (0,0) в функцию TranslatePoint. Поскольку дочерний элемент переводит точку в своем координатном пространстве в другой визуал, его левый верхний угол равен (0,0).

0 голосов
/ 07 августа 2009

Просто догадываюсь, потому что я не знаю, что делает FindAncestors.FindAncestor, но я предполагаю, что он возвращает контейнер элемента, а не горизонтально-центрированный контент контейнера , Требуется верхняя левая координата содержимого, а не контейнера.

...