2010-12-20 225 views
13

我正在致力于扩展Microsoft调整大小Adorner示例,并且需要能够在拖动左下角拖动手柄后重新定位元素。获取WPF UIElement的左上角坐标

所以,如果我有一个150宽的文本框,我的表单上有35个高的文本框,左下方的拖动手柄将宽度更改为200宽,文本框的右手保持不变,但左手边移动往左边。

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

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

在Wpf之前的日子里,坐标系统非常简单,wpf让我觉得过于复杂。

回答

8

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

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

    return areaPosition; 
} 
21

如果有人只是想控制的屏幕坐标

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

(这不符合线程的描述,但它确实符合标题,它可能有助于人们进入搜索结果)

+0

正是我在找的东西! – Shefali 2012-12-12 12:06:59

+1

来自谷歌这篇文章(因为标题)得到这个答案。谢谢! – StinkyCat 2013-11-08 16:34:04

相关问题