Как получить положение элемента в StackPanel? - PullRequest
8 голосов
/ 02 октября 2009

Скажем, у меня есть StackPanel, которая динамически заполняется копией, меняя положение Y элементов внутри нее. У меня есть определенный элемент в этой StackPanel, который я хочу найти в позиции Y (относительно StackPanel или иным образом) после того, как StackPanel выполнит репозицию всех его дочерних элементов.

StackPanel sp = new StackPanel();
sp.Children.Add(someTextBlock);
sp.Children.Add(element1);
sp.Children.Add(element2);
...
someTextBlock.Text = "Lorem ipsum dolor..." // some text that pushes children of > index down
// element1 got pushed down to some unknown position based on text length
// now want to find the Y position of element1

Я заметил, что такие методы: http://forums.silverlight.net/forums/p/16787/55881.aspx#55881 не работают, поскольку возвращаемая позиция - это позиция StackPanel, а не дочерний элемент, на который я нацеливаюсь.

1 Ответ

14 голосов
/ 02 октября 2009

Методы в ссылке , которую вы разместили , должны работать нормально, если вы вызываете их правильно.

Вам нужно вызывать их с правильным UIElement - в этом случае использование element1 для RootVisual даст вам полную позицию element1:

var transform = element1.TransformToVisual(Application.Current.RootVisual as FrameworkElement);        
Point absolutePosition = transform.Transform(new Point(0, 0));
...