2009-09-24 15 views
9

so habe ich dieses UserControl, das in einem anderen UserControl ist. Lassen Sie uns sie ElternUC und ChildUC nennen. Ich muss Eltern von ChildUC bekommen.WPF Holen UserControl Besitzer

Ich weiß, um den Fenster Besitzer wäre Window.GetWindow(userControl), aber UserControl hat keine Methode wie diese AFAIK.

Danke für die Hilfe!

Antwort

14

Ich kam mit dieser Lösung, aber Post, wenn Sie eine bessere haben. Vielen Dank!

DependencyObject ucParent = this.Parent; 

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

Sie können immer VisualTreeHelper.GetParent(child) verwenden, um das übergeordnete Element in der visuellen Struktur (das übergeordnete Benutzersteuerelement aus einem geschachtelten Benutzersteuerelement) zurückzugeben.

+0

Ich tat das, aber es bekommt das Gitter, das das Steuerelement enthält, das ist der Grund, den ich Schleife musste, bis es das erste UserControl in der logischen Struktur erhält. Und ich denke, es ist besser, den LogicalTreeHelper zu verwenden, damit die Schleife nicht in die Vorlagen, die Adorner usw. kommt. Danke für den Vorschlag. – Carlo

0

UserControl verfügt über eine .Parent-Eigenschaft, die Ihnen den Zugriff auf die übergeordneten Elemente ermöglichen soll.

Dann können Sie es in Ihr ParentUC-Objekt umwandeln.

+0

Ja, das Problem besteht darin, dass sich das UserControl in einem StackPanel befindet, das sich in einem Grid innerhalb des übergeordneten UserControls befindet. In diesem Fall ist myUserControl.Parent ein StackPanel, myUserControl.Parent.Parent wäre ein Grid, und schließlich myUserControl.Parent.Parent.Parent (lol wird natürlich vereinfacht, indem das Parent nicht in StackPanel oder Grid umgewandelt wird) wäre das UserControl. Deshalb benutze ich die Schleife, um das erste UserControl zu finden, das über dem Kind liegt. – Carlo

+0

Haha, ich habe die Lösung gesehen, die du gepostet hast (ohne zu merken, dass du die Frage auch gestellt hast) und da die Frage aufkam, dass die ChildUC ein direktes Kind von ParentUC wäre, wollte ich eine einfachere Lösung anbieten Antworten. Angesichts der zusätzlichen Informationen zu Ihrem Szenario denke ich, dass Sie die Lösung gefunden haben, die Sie benötigen. – Scott

+0

Ja scheint so. Irgendwo lese ich das, was Window.GetWindow (UIElement) tut, also denke ich, das ist die beste Wette. Danke für den Vorschlag! – Carlo