2009-09-24 71 views
9

所以我有这个用户控件在另一个用户控件中。让我们称他们为ParentUC和ChildUC。我需要从ChildUC获得ParentUC。WPF获取UserControl所有者

我知道让窗口所有者为Window.GetWindow(userControl),但UserControl没有像这样的AFAIK方法。

感谢您的帮助!

回答

14

我想出了这个解决方案,但后期如果你有一个更好的。谢谢!

DependencyObject ucParent = this.Parent; 

while (!(ucParent is UserControl)) 
{ 
    ucParent = LogicalTreeHelper.GetParent(ucParent); 
} 
0

您始终可以使用VisualTreeHelper.GetParent(child)来返回可视化树中的父级(来自嵌套用户控件的父级用户控件)。

+0

我做到了,但它获取包含控件的网格,这就是我必须循环直到获得逻辑树中的第一个UserControl的原因。我认为最好使用LogicalTreeHelper,这样循环就不会进入模板,装饰等等。感谢您的建议。 – Carlo 2009-09-24 22:18:02

0

UserControl有一个.Parent属性,应该允许您访问它的父级。

然后你可以将它投射到你的ParentUC对象。

+0

是的,问题在于UserControl可能位于父级UserControl内的一个StackPanel内部,即在这个内部,在这种情况下,myUserControl.Parent将是一个StackPanel,myUserControl.Parent.Parent将是一个网格,最后是myUserControl.Parent.Parent.Parent(当然,这是简化的通过不父母StackPanel或网格简化)将是UserControl。这就是为什么我使用循环来获取在子节点上找到的第一个UserControl。 – Carlo 2009-09-25 15:11:56

+0

哈哈,我看到你发布的解决方案(没有意识到你也问过这个问题),并且由于问题出现了(对我来说)表明ChildUC是ParentUC的直接孩子,我想提供一个更简单的回答。考虑到您的方案的其他信息,我认为您提出的解决方案就是您需要做的。 – Scott 2009-09-25 15:31:51

+0

好像是这样。我读的地方就是Window.GetWindow(UIElement)所做的,所以我猜这是最好的选择。还是)感谢你的建议! – Carlo 2009-09-25 15:34:35