获取WPF UIElement的左上角坐标

时间:2010-12-20 18:41:07

标签: wpf wpf-controls uielement

我正在努力扩展Microsoft resize Adorner示例,并且需要能够在拖动左下拖动句柄之后重新定位元素。

所以如果我有一个150宽的文本框,在我的表格上有35个高位,左下方的拖动手柄将宽度更改为200宽,文本框的右手保持不变但左手边移动到左边。

所以我需要知道UIElement的左上角坐标。我已经尝试过Canvas.GetLeft和Canvas.GetTop,但是它们返回的NaN令人困惑。

我刚尝试了VisualTreeHelper.GetOffset,它确实返回了一个偏移,但是当你尝试在元素的arrange方法中使用它时它会消失,大概是因为偏移中的值太高了。

在Wpf之前的几天,坐标系很简单,wpf让我觉得过于复杂。

2 个答案:

答案 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;
}
相关问题