13

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

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

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

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

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

4

2 回答 2

26

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

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

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

于 2012-10-09T12:58:00.460 回答
11

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

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

   return areaPosition;
}
于 2011-01-06T10:16:44.477 回答