C# 获取WPF元素的左上角坐标

C# 获取WPF元素的左上角坐标,c#,.net,wpf,wpf-controls,uielement,C#,.net,Wpf,Wpf Controls,Uielement,我正在扩展Microsoft resizeAdorner示例,并需要能够在拖动左下拖动手柄后重新定位元素 因此,如果我的表单上有一个150宽、35高的文本框,并且左下角的拖动手柄将宽度更改为200宽,则文本框的右侧保持不变,但左侧边缘移动到左侧 所以我需要知道元素左上角的坐标。我尝试过Canvas.GetLeft和Canvas.GetTop,但它们返回的是NaN,这让人困惑 我刚刚尝试了VisualTreeHelper.GetOffset,它确实返回了一个偏移量,但是当您尝试在元素的排列方法中使

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

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

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

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


在Wpf之前的日子里,坐标系非常简单,我认为Wpf已经把事情复杂化了

您可以将
ui元素的坐标转换为其父元素。对你来说,这是一种形式。下面是一个返回可视对象坐标的方法示例:

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

   return areaPosition;
}

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

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

(这与线程的描述不匹配,但与标题匹配。我想这可能有助于搜索结果中的用户)

正是我要找的!!来自谷歌的这篇文章(因为标题)得到了这个答案。非常感谢。