2013-07-03 6 views
7

Ich habe ein WPF-Fenster in einem Projekt mit einer XAML-Datei und zugeordneten C# -Code hinter der Datei. Wenn ich "StartupUri = MainWindow.xaml" in App.xaml auf dieses Fenster setze, wird das Fenster wie erwartet geöffnet, wenn ich meine Anwendung starte.WPF-Fenster erstellt in Application_Startup-Methode ist leer

Ich möchte jedoch, dass meine Anwendung Kommandozeilenparameter übernimmt und dann entscheidet, ob es die GUI öffnen soll oder nicht. Stattdessen habe ich "Startup = Application_Startup" in meiner App.xaml-Datei festgelegt, die wie folgt definiert ist.

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(); 
     } 
    } 

Aber wenn ich das ausführe, ist das angezeigte Fenster völlig leer.

enter image description here

+0

mögliches Duplikat von [WPF Command Line] (http://stackoverflow.com/questions/426421/wpf-command-line) –

Antwort

9

Hinzufügen window.InitializeComponent() den Trick zu tun scheint:

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

ich in der Regel eine kleine Erklärung haben wollen, warum etwas funktioniert oder nicht funktioniert. Ich habe in diesem Fall keine Ahnung. Ich kann sehen, dass die Beispiele online InitializeComponent nicht enthalten, und dennoch erzeuge ich den gleichen genauen Fehler wie Sie (Ereignis ohne Überprüfung auf Argumente).

+0

Wird die InitializeComponent-Methode nicht standardmäßig im MainWindow-Konstruktor aufgerufen? –

+3

Sie haben vermutlich 'InitializeComponent' aus dem Konstruktor der' MainWindow' Klasse entfernt. Dies ist erforderlich, um den Code im vom Designer generierten Code auszuführen (die MainWindow.g.cs-Datei, die Sie möglicherweise entdeckt haben) – Charleh

+0

Ah ha! Ja, ich muss InitializeComponent() aus dem Konstruktor gelöscht haben. Durch das Hinzufügen wurde das Problem behoben. Kann mir jemand erklären, warum es bei der Arbeit mit StartupUri funktioniert hat? –

0

Ich habe eine Beispielanwendung erstellt und die StartupUri entfernt und den Start auf die von Ihnen bereitgestellte Methode festgelegt. Alles scheint wie erwartet zu funktionieren, der Inhalt des Fensters wird angezeigt, also vermissen Sie, wie Daniel erwähnte, den Aufruf der InitializeComponent-Methode in Ihrem MainWindow-Konstruktor.