2009-09-18 55 views
2

我的WPF對象深處hiearchy我創建了一個Window對象。如何訪問WPF層次結構中對象的基本父項?

但是,我希望此窗口對象的所有者成爲基本窗口對象

我已經試過「爬上樹」具有以下類型的代碼,但這種做法似乎次優

(((((((TabGroupPane)((ContentPane) this.Parent).Parent).Parent as 
SplitPane).Parent as DocumentContentHost).Parent as 
XamDockManager).Parent as ContentControl).Parent as 
StackPanel).Parent... 

我怎樣才能訪問基Window對象?

我在想是這樣的:

僞代碼:

Window baseWindow = this.BaseParent as Window; 

回答

2

,對工作的一種方法所有類型都是走上邏輯樹直到找到所需類型的節點:

Window baseWindow = FindLogicalParent<Window>(this); 

該方法不框架存在,所以這裏是一個實現:

internal static T FindLogicalParent<T>(DependencyObject obj) 
    where T : DependencyObject 
{ 
    DependencyObject parent = obj; 
    while (parent != null) 
    { 
     T correctlyTyped = parent as T; 
     if (correctlyTyped != null) 
      return correctlyTyped; 
     parent = LogicalTreeHelper.GetParent(parent); 
    } 

    return null; 
} 

Window具體情況,你可以使用:

Window.GetWindow(this); 
0

讓我回答這個問題:

Window baseWindow = Application.Current.Windows[0]; 
+0

這是假設你只有一個窗口。 – 2009-09-18 12:24:06

相關問題