获取WPF UIElement的左上角坐标

14

我正在扩展微软的调整大小 Adorner 示例,并且需要在例如拖动底部左侧手柄之后重新定位元素。

因此,如果我有一个宽度为150、高度为35的文本框,位置在我的表单上,底部左侧手柄将宽度更改为200,文本框的右侧保持不变,但左侧边缘向左移动。

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

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

在 Wpf 之前的日子里,坐标系统非常简单,我认为 Wpf 过于复杂化了。

2个回答

27

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

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

(这与帖子的描述不符,但与标题相符。认为这可能有助于来自搜索结果的人)


2
来自谷歌到这篇文章(因为标题)来获取这个答案。谢谢! - StinkyCat

12

您可以将UIElement的坐标系转换为其父级坐标系。在您的情况下,它是一个表单。以下是一个返回视觉元素坐标的方法示例:

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

   return areaPosition;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接