Получение верхних левых координат WPF UIElement

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

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

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

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

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

Ответы

Ответ 1

И если кто-то просто хочет контролировать координаты экрана:

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

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

Ответ 2

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

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

   return areaPosition;
}