2015-12-25 156 views
0

我正在C#WPF中創建一個應用程序,並需要我添加到面板的對象的位置。在調試過程中,我找到了給我相對位置的對象的VisualOffset屬性。我無法從代碼中獲得價值。暴露VisualOffsets屬性

UserControl object - VisualOffset

我想要做的是(雖然它是不可能的):

var display = new Display(); // This is a class that inhereit UserControl 
. 
. 
// At some point when display is added to a panel 
var position = display.VisualOffset; // This property is not accessible 

所以,我怎麼能得到一個物體的相對位置?

+0

爲什麼不在UserControl中創建另一個公共屬性,它只是返回'VisualOffset'值? – Clemens

回答

1

使用TranslatePoint方法的Display實例。將父控件設置爲目標。下面的代碼會給你父母的座標display。如果容器在視覺樹下方,則必須找到父級的父級。

在我的示例中,我發現父母。我在按鈕點擊時這樣做,然後將結果作爲字符串返回到文本框 - 純粹是爲了簡單起見。但這個想法是一樣的,無論你使用它:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var parent = display.Parent as UIElement; 
    var location = display.TranslatePoint(new Point(0, 0), parent); 

    this.myTextBox.Text = $"x: {location.X}, y: {location.Y}"; 
} 

display當然是Display用戶控件的實例。

+1

謝謝。有用。是否存在VisualOffset屬性存在但無法訪問的原因? – Daltons