2009-09-24 99 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