2013-04-26 10 views
19

Sto tentando di accedere alla finestra principale dal controllo utente.Accesso alla finestra principale dal controllo utente

userControl1 uc1 = new userControl1(); 

mainGrid.Children.Add(uc1); 

tramite questo codice I LOAD userControl1 a griglia principale.

Ma quando clicco su un pulsante all'interno di userControl1 allora voglio caricare un altro userControl2 in mainGrid che si trova nella finestra principale?

risposta

40

Hai provato

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

sì ho provato ma poi dopo come può caricare userControl2 in mainGrid? –

+0

Window yourParentWindow = Window.GetWindow (userControl1); yourParentWindow.mainGrid.children.add (nuovo userControl2); è questo codice giusto? –

+0

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

0

Fai un'istanza statica della finestra principale, si può semplicemente chiamare nel vostro controllo utente:

Vedi questo esempio:

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

Questa soluzione non funzionerà se sono aperte più istanze della finestra in questione alla volta. Vedo nel tuo commento che ti riferisci alla "Finestra principale" perché funzioni (e immagino che ci sia sempre solo una). Tuttavia, va notato che questo non è scalabile a tutti i tipi di finestre. – curob

1

Grazie per aiutarmi ragazzi. ho ottenuto un'altra soluzione

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

questo è funziona perfettamente

+2

Attenzione: qui si assume che il genitore del proprio controllo sarà sempre un'istanza Window. – Crono

11

Questo diventa la finestra di livello principale:

Window parentWindow = Application.Current.MainWindow 

o la finestra padre immediato

Window parentWindow = Window.GetWindow(this); 
0

L'unica ragione per cui la suggerito

Window yourParentWindow = Window.GetWindow(userControl1); 

non ha funzionato per voi è perché non hai lanci per il giusto tipo:

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

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

meno che non ci deve essere modo più accoppiamento tra il tipo di finestre e il vostro controllo, ritengo la vostra approccio cattivo design.

Suggerirei di passare la griglia su cui il controllo opererà come parametro costruttore, trasformarlo in una proprietà o cercare la griglia appropriata (root?) All'interno di qualsiasi Window in modo dinamico.

Problemi correlati