2013-04-26 16 views
19

Próbuję uzyskać dostęp do okna nadrzędnego z poziomu kontroli użytkownika.Dostęp do okna nadrzędnego z Kontroli użytkownika

userControl1 uc1 = new userControl1(); 

mainGrid.Children.Add(uc1); 

tym kodem ładuję userControl1 do głównej sieci.

Ale kiedy kliknę przycisk wewnątrz userControl1, chcę załadować kolejny userControl2 do mainGrid, który znajduje się w głównym oknie?

Odpowiedz

40

Czy próbowałeś

Window yourParentWindow = Window.GetWindow(userControl1); 
+0

tak próbowałem, ale po tym, jak można załadować userControl2 do mainGrid? –

+0

Okno yourParentWindow = Window.GetWindow (userControl1); yourParentWindow.mainGrid.children.add (new userControl2); czy to jest właściwy kod? –

+0

yourParentWindow.mainGrid.Children.Add (new userControl2()) –

0

Zrób statyczną instancję oknie głównym, można po prostu nazwać to w kontroli użytkownika:

Zobacz ten przykład:

Window1.cs

public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
      _Window1 = this; 
     } 
     public static Window1 _Window1 = new Window1(); 

    } 

UserControl1.CS

public partial class UserControl1 : UserControl 
    { 
     public UserControl1() 
     { 
      InitializeComponent(); 

     } 
     private void AddControl() 
     { 
      Window1._Window1.MainGrid.Children.Add(usercontrol2) 
     } 
    } 
+0

To rozwiązanie nie zadziała, jeśli w danej chwili otwartych jest więcej niż jedno wystąpienie danego okna. W twoim komentarzu widzę, że odwołujesz się do "okna głównego", aby to działało (co, jak sądzę, będzie tylko jednym z nich). Należy jednak zauważyć, że nie skaluje się do wszystkich typów okien. – curob

1

Dzięki za pomoc mi chłopaki. Mam inne rozwiązanie

((this.Parent) as Window).Content = new userControl2(); 

to doskonale współpracuje

+2

Uwaga: tutaj zakłada się, że rodzic nadrzędny zawsze będzie instancją okna. – Crono

11

To dostaje okno poziomu root:

Window parentWindow = Application.Current.MainWindow 

lub natychmiastowego okna nadrzędnego

Window parentWindow = Window.GetWindow(this); 
0

Jedynym powodem, dla którego zaproponowano

Window yourParentWindow = Window.GetWindow(userControl1); 

zrobił praca jest dla Ciebie, ponieważ nie oddanych do prawego typu:

var win = Window.GetWindow(this) as MyCustomWindowType; 

if (win != null) { 
    win.DoMyCustomWhatEver() 
} else { 
    ReportError("Tough luck, this control works only in descendants of MyCustomWindowType"); 
} 

ile nie musi być sposób bardziej sprzężenie między rodzaju okien i kontrolą, ja za swój podejdź do złego projektu.

Proponuję przekazać siatkę, na której sterowanie będzie działało jako parametr konstruktora, przekształcić go w właściwość lub wyszukać odpowiednią siatkę (root?) Wewnątrz dowolnego Window dynamicznie.

Powiązane problemy