Получение верхних левых координат 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;
}