在我的自定义WPF控件内,我想获取包含它的窗口或页面。当控件在窗口应用程序中时,Window.GetWindow()方法能够正常工作,但当它在浏览器中的XBAP应用程序中时,它返回的是浏览器窗口而不是页面。
有其他的方法可以实现这个功能吗?
在我的自定义WPF控件内,我想获取包含它的窗口或页面。当控件在窗口应用程序中时,Window.GetWindow()方法能够正常工作,但当它在浏览器中的XBAP应用程序中时,它返回的是浏览器窗口而不是页面。
有其他的方法可以实现这个功能吗?
这对我有效:
Window parentWindow = Window.GetWindow(this);
var parent = VisualTreeHelper.GetParent(this);
while (!(parent is Page))
{
parent = VisualTreeHelper.GetParent(parent);
}
(parent as Page).DoStuff();
while (!(parent is Page))
和 (parent as Page).DoStuff();
改为测试并转换为您的页面类。如果是主页(MainPage),则使用 parent is MainPage
等。显然,DoStuff()
应该是您函数的名称。 - Tomislav MarkovskiDependencyObject GetTopLevelControl(DependencyObject control)
{
DependencyObject tmp = control;
DependencyObject parent = null;
while((tmp = VisualTreeHelper.GetParent(tmp)) != null)
{
parent = tmp;
}
return parent;
}
我认为最好的方法是
var obj = VisualTreeHelper.GetParent((DependencyObject)Content);