Еще одна проблема из моей серии вопросов о WPF:)
Я создаю пользовательский Decorator
, который будет использоваться для украшения Panel
с (или это может быть поведение, без разницы).
То, что Decorator
имеет дело с элементами, которые находятся в этом Panel
(Children
свойство Panel
).Он прикрепляет некоторые RenderTransform
к этим элементам.Теперь мне нужна позиция некоторого элемента («потомка» Panel
) относительно самого Panel
.Другими словами, мне нужна позиция, если какой-то дочерний элемент в координатном пространстве Panel
s.другими словами, я хочу, чтобы смещение, которое было задано методом ArrangeOverride
Panel
при вызове метода Arrange
для Children
.
Это кажется простым.Но я не могу найти способ всегда получать правильные координаты.
Этот код
VisualTreeHelper.GetOffset(child)
не работает, когда панель находится внутри ScrollView
- она занимает верхнюю частькрайний левый видимый угол Panel
как начало координатного пространства, а не самый верхний и самый левый угол Panel
.
Код
Point position = child.TransformToAncestor(panel).Transform(new Point(0,0));
не будет работать, когданекоторые преобразования рендеринга уже активны в дочернем элементе Panel
.Он вернет позицию преобразованного изображения (с помощью преобразования визуализации) дочернего элемента.Позиция рендеринга.
Та же проблема с этим подходом:
Point panelPosition = panel.PointToScreen(new Point(0, 0));
Point childPosition = child.PointToScreen(new Point(0, 0));
Point position = new Point(childPosition.X - panelPosition.X, childsPosition.Y - panelPosition.Y);
Так что я попытался, но это не сработало.У меня есть 2 похожих вопроса на эту тему, которые были связаны, чтобы упростить проблему, поэтому я получил несколько предложений выше.Теперь я представил проблему в ее полной сложности, надеюсь получить правильный совет.
Если что-то неясно, оставьте комментарий.Спасибо