我正在努力扩展Microsoft resize Adorner
示例,并且需要能够在拖动左下拖动句柄之后重新定位元素。
所以如果我有一个150宽的文本框,在我的表格上有35个高位,左下方的拖动手柄将宽度更改为200宽,文本框的右手保持不变但左手边移动到左边。
所以我需要知道UIElement的左上角坐标。我已经尝试过Canvas.GetLeft和Canvas.GetTop,但是它们返回的NaN令人困惑。
我刚尝试了VisualTreeHelper.GetOffset,它确实返回了一个偏移,但是当你尝试在元素的arrange方法中使用它时它会消失,大概是因为偏移中的值太高了。
在Wpf之前的几天,坐标系很简单,wpf让我觉得过于复杂。
答案 0 :(得分:21)
如果有人只想要控件的屏幕坐标:
Point targetLoc = targetCtrl.PointToScreen(new Point(0, 0));
(这与线程的描述不符,但它确实与标题匹配。想象它可能会帮助人们从搜索结果中获取)
答案 1 :(得分:9)
您可以将UIElement
的坐标转换为其父坐标。在你的情况下,它是一个表格。以下是返回视觉坐标的方法示例:
private Point GetPosition(Visual element) {
var positionTransform = element.TransformToAncestor(MyForm);
var areaPosition = positionTransform.Transform(new Point(0, 0));
return areaPosition;
}