2013-07-03 16 views
7

Ho una finestra WPF in un progetto con un file XAML e associato il codice C# dietro file. Se imposto "StartupUri = MainWindow.xaml" in App.xaml in questa finestra, la finestra si apre come previsto quando avvio la mia applicazione.Window WPF creato nel metodo Application_Startup è vuoto

Tuttavia, voglio la mia domanda di prendere i parametri della riga di comando e poi ha deciso se deve aprire la GUI o meno. Così, invece, ho impostato "Startup = Application_Startup" nel mio file App.xaml che è definito come mostrato di seguito.

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     if (e.Args.Length > 1) 
     { 
      //do automated tasks 
     } 
     else 
     { 
      //open ui 

      MainWindow window = new MainWindow(); 
      this.MainWindow = window; 

      window.Show(); 
     } 
    } 

Eppure, quando ho eseguito questo la finestra visualizzata è completamente vuota.

enter image description here

+0

possibile duplicato di [Riga di comando WPF] (http://stackoverflow.com/questions/426421/wpf-commandline) –

risposta

9

Aggiunta window.InitializeComponent() sembra fare il trucco:

  MainWindow window = new MainWindow(); 
      Application.Current.MainWindow = window; 
      window.InitializeComponent(); 
      window.Show(); 

solito mi piace avere una piccola spiegazione sul perché qualcosa fa o non funziona. Non ho idea in questo caso. Posso vedere che gli esempi online non includono InitializeComponent, eppure produco lo stesso errore esatto che si fa (evento senza verificare per args).

+0

Il metodo InitializeComponent non viene chiamato nel costruttore MainWindow per impostazione predefinita? –

+3

Probabilmente hai appena rimosso 'InitializeComponent' dal costruttore della classe' MainWindow'. Questo è necessario per eseguire il codice nel codice generato dal designer (il file MainWindow.g.cs che potresti aver individuato) – Charleh

+0

Ah ah! Sì, devo aver cancellato InitializeComponent() dal costruttore. L'aggiunta di nuovo ha risolto il problema. Qualcuno può spiegare perché ha funzionato il lavoro quando ho usato StartupUri? –

0

Ho creato un'applicazione di esempio, e rimosso lo StartupUri e impostare l'avvio al metodo che hai fornito. Tutto sembra funzionare come previsto, viene visualizzato il contenuto della finestra, quindi forse, come ha detto Daniel, manca la chiamata al metodo InitializeComponent nel costruttore MainWindow.