C# 获取WPF元素的左上角坐标
我正在扩展Microsoft resizeC# 获取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,它确实返回了一个偏移量,但是当您尝试在元素的排列方法中使
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));
(这与线程的描述不匹配,但与标题匹配。我想这可能有助于搜索结果中的用户)正是我要找的!!来自谷歌的这篇文章(因为标题)得到了这个答案。非常感谢。