2013-07-03 10 views
7

Mam okno WPF w projekcie z plikiem XAML i powiązanym z nim kodem C#. Jeśli ustawię "StartupUri = MainWindow.xaml" w App.xaml na to okno, to okno otworzy się zgodnie z oczekiwaniami, kiedy uruchomię swoją aplikację.Okno WPF utworzone w metodzie Application_Startup jest puste

Jednak chcę, aby moja aplikacja przyjmowała parametry linii poleceń, a następnie zdecydowała, czy powinna otworzyć GUI, czy też nie. Zamiast tego ustawiłem "Startup = Application_Startup" w moim pliku App.xaml, który jest zdefiniowany jak pokazano poniżej.

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

Jednak po uruchomieniu tego okna wyświetlane jest całkowicie puste.

enter image description here

+0

możliwy duplikat [linii poleceń WPF] (http://stackoverflow.com/questions/426421/wpf-command-line) –

Odpowiedz

9

Dodawanie window.InitializeComponent() wydaje rade:

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

zazwyczaj lubią mieć trochę wyjaśnienie, dlaczego coś robi lub nie działa. W tej sprawie nie mam pojęcia. Widzę, że przykłady online nie zawierają InitializeComponent, a mimo to generuję dokładnie ten sam dokładny błąd (bez sprawdzania argumentów).

+0

Czy metoda InitializeComponent nie jest domyślnie wywoływana w konstruktorze MainWindow? –

+3

Prawdopodobnie właśnie usunięto 'InitializeComponent' z konstruktora klasy' MainWindow'. Jest to wymagane do uruchomienia kodu w wygenerowanym przez projektanta kodzie (plik MainWindow.g.cs, który mógł zostać wykryty) – Charleh

+0

Ah ha! Tak, musiałem usunąć InitializeComponent() z konstruktora. Dodanie go rozwiązało problem. Czy ktoś może wyjaśnić, dlaczego zadziałało, gdy używałem StartupUri? –

0

Utworzono przykładową aplikację, a następnie usunięto plik StartupUri i skonfigurowano opcję Uruchomienie do podanej metody. Wszystko wydaje się działać zgodnie z oczekiwaniami, zawartość okna jest wyświetlana, więc być może, jak wspomniał Daniel, brakuje połączenia z metodą InitializeComponent w konstruktorze MainWindow.

Powiązane problemy