如何访问WPF层次结构中对象的基本父级?

时间:2009-09-18 11:58:34

标签: c# wpf hierarchy

深入我的WPF对象 hiearchy 我创建了一个Window对象。

但是,我希望此窗口对象的所有者基础窗口对象

我尝试使用以下类型的代码“爬上树”,但这种方法似乎次优

(((((((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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

请允许我回答这个问题:

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