在我的自定义WPF控件中,我希望获得一个包含Window或Page。当控件在窗口化的应用程序中时,Window.GetWindow()方法可以正常工作,但是当它在浏览器的XBAP应用程序中时,它会返回浏览器窗口而不是页面。
还有其他办法吗?
答案 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);