Получение левых верхних координат элемента WPF - PullRequest
13 голосов
/ 20 декабря 2010

Я работаю над расширением примера Microsoft resize Adorner, и мне нужно иметь возможность изменить положение элемента после того, как, скажем, перетаскивается нижний левый маркер перетаскивания.

Таким образом, если у меня есть текстовое поле, скажем, шириной 150, с высотой 35, размещенное на моей форме, и нижний левый маркер перетаскивания изменяет ширину на 200, правая часть текстового поля остается неизменной, но левый край перемещается левый.

Так что мне нужно знать верхние левые координаты UIElement. Я пробовал Canvas.GetLeft и Canvas.GetTop, но они возвращают NaN, что сбивает с толку.

Я только что попробовал VisualTreeHelper.GetOffset, который возвращает смещение, но когда вы пытаетесь использовать его в методе расположения элемента, оно исчезает, предположительно, так как значения в смещении слишком велики.

В дни до Wpf система координат была довольно простой, я думаю, что wpf усложнил вещи.

Ответы [ 2 ]

21 голосов
/ 09 октября 2012

А если кому-то просто нужны экранные координаты элемента управления :

Point targetLoc = targetCtrl.PointToScreen(new Point(0, 0));

(это не соответствует описанию ветки, но соответствует заголовку. Предполагается, что это может помочь людям с результатами поиска)

9 голосов
/ 06 января 2011

Вы можете преобразовать координаты UIElement в его родителя.В вашем случае это форма.Вот пример метода, который возвращает координаты визуала:

private Point GetPosition(Visual element) {
   var positionTransform = element.TransformToAncestor(MyForm);
   var areaPosition = positionTransform.Transform(new Point(0, 0));

   return areaPosition;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...