繁体   English   中英

获取 WPF UIElement 的左上角坐标

[英]Getting the top left coordinates of a WPF UIElement

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

因此,如果我在表单上放置了一个 150 宽、35 高的文本框,并且左下方的拖动手柄将宽度更改为 200 宽,则文本框的右侧保持不变,但左侧边缘向左移动。

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

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

在 Wpf 之前的日子里,坐标系非常简单,我认为 wpf 使事情变得过于复杂。

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

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

(这与线程的描述不匹配,但它确实与标题匹配。认为这可能有助于人们进入搜索结果)

您可以将UIElement坐标转换为其父级。 在你的情况下,它是一种形式。 以下是返回视觉坐标的方法示例:

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

   return areaPosition;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM