深入我的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;
答案 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];