获取WPF UIElement的左上角坐标

use*_*708 13 .net c# wpf wpf-controls uielement

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

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

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

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

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

Bil*_*ell 21

如果有人只想要控件的屏幕坐标:

Point targetLoc = targetCtrl.PointToScreen(new Point(0, 0));
Run Code Online (Sandbox Code Playgroud)

(这与线程的描述不符,但它确实与标题匹配.想象它可能会帮助人们从搜索结果中获取)

  • 从谷歌来到这篇文章(因为标题)得到这个答案。谢谢! (2认同)

Pav*_*kov 9

您可以将坐标转换UIElement为其父坐标.在你的情况下,它是一个表格.以下是返回视觉坐标的方法示例:

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

   return areaPosition;
}
Run Code Online (Sandbox Code Playgroud)