如何在WPF中获得顶级对象(窗口或页面)?

时间:2009-05-08 08:37:43

标签: wpf wpf-controls

在我的自定义WPF控件中,我希望获得一个包含Window或Page。当控件在窗口化的应用程序中时,Window.GetWindow()方法可以正常工作,但是当它在浏览器的XBAP应用程序中时,它会返回浏览器窗口而不是页面。

还有其他办法吗?

4 个答案:

答案 0 :(得分:62)

这对我有用:

Window parentWindow = Window.GetWindow(this);

答案 1 :(得分:28)

var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
    parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();

答案 2 :(得分:6)

您可以使用VisualTreeHelper类来检索顶级控件:

DependencyObject GetTopLevelControl(DependencyObject control)
{
    DependencyObject tmp = control;
    DependencyObject parent = null;
    while((tmp = VisualTreeHelper.GetParent(tmp)) != null)
    {
        parent = tmp;
    }
    return parent;
}

答案 3 :(得分:0)

我认为最好的方法是

var obj = VisualTreeHelper.GetParent((DependencyObject)Content);