2010-12-20 248 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

相關問題