Получить позицию элемента после преобразования - PullRequest
6 голосов
/ 11 марта 2011

У меня есть UIElement, в котором выполняются различные преобразования (масштабирование и перевод).

Есть ли способ получить позицию UIElement после трансформации? Я попытался GetValue(Canvas.TopProperty), но это не изменилось с того, что было загружено.

Я, должно быть, упускаю что-то очевидное, но не уверен, что. (Я использую Silverlight)

Ответы [ 3 ]

18 голосов
/ 19 марта 2011

Это немного не интуитивно понятно, но это можно сделать. Это двухступенчатый процесс. Во-первых, что вы хотите использовать функцию TransformToVisual ( из MSDN ):

Возвращает объект преобразования, который можно использовать для преобразования координат из UIElement в указанный объект.

TransformToVisual даст GeneralTransform, который будет выполнять преобразование из любого UIElement в любой другой UIElement (учитывая, что они оба существуют в одном и том же визуальном дереве). Похоже, что вы хотите, это преобразование из RootVisual.

var transform = Application.RootVisual.TransformToVisual(myUiElement);

Объект transform теперь является общим преобразованием, которое можно использовать для преобразования чего-либо так же, как преобразовано myUiElement относительно RootVisual

.

Следующим шагом является преобразование точки с использованием этого преобразования.

var myUiElementPosition = transform.Transform(new Point(0,0));

myUiElementPosition теперь является Point, который был преобразован и должен быть позицией UIElement, которую вы ищете. new Point(0,0) используется, потому что я предполагаю, что вы хотите задать позицию относительно верхнего левого угла RootVisual.

2 голосов
/ 19 марта 2011

Попробуйте использовать этот подход:

var offset = Application.RootVisual.TransformToVisual(myObject)
                                   .Transform(new Point(0,0));

TransformToVisual

0 голосов
/ 11 марта 2011

EDIT:

хорошо, как насчет этого?

myObjectTransform.GetValue(CompositeTransform.TranslateXProperty)

и

myObjectTransform.GetValue(CompositeTransform.TranslateYProperty)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...