2013-07-03 2 views
7

XAMLファイルと関連付けられたC#コードビハインドファイルを含むプロジェクト内にWPFウィンドウがあります。 App.xamlの "StartupUri = MainWindow.xaml"をこのウィンドウに設定すると、アプリケーションを起動するときに期待どおりにウィンドウが開きます。WPF Application_Startupメソッドで作成されたウィンドウが空白です

しかし、私はアプリケーションにコマンドラインパラメータを渡し、GUIを開くべきかどうかを決定したい。だから代わりに、私は "Startup = Application_Startup"を以下のように定義された私のApp.xamlファイルにセットしました。

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

これを実行すると、表示されるウィンドウは完全に空白になります。

enter image description here

+0

[WPFコマンドライン](http://stackoverflow.com/questions/426421/wpf-command-line)の可能な複製 –

答えて

9

window.InitializeComponent()を追加するトリックを行うようだ:

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

私は通常、何かがない、または動作しない理由について少し説明をしてもらいたいです。私はこの場合に手がかりがありません。私は、オンラインの例にInitializeComponentが含まれていないことがわかりましたが、あなたは同じような正確なエラーを出す(イベントはargをチェックせずに)。

+0

InitializeComponentメソッドがデフォルトでMainWindowコンストラクタで呼び出されていませんか? –

+3

'MainWindow'クラスのコンストラクタから' InitializeComponent'を削除したばかりです。これは、デザイナで生成されたコード(あなたが見つけた可能性のあるMainWindow.g.csファイル)でコードを実行するために必要です – Charleh

+0

Ah ha!はい、コンストラクタからInitializeComponent()を削除しておく必要があります。それを追加することで問題は解決しました。 StartupUriを使用したときになぜそれがうまくいったのか誰でも説明できますか? –

0

私はサンプルアプリケーションを作成し、StartupUriを削除し、提供したメソッドにStartupを設定しました。すべてが期待どおりに動作しているようですが、ウィンドウの内容が表示されるので、Danielが述べたように、MainWindowコンストラクタのInitializeComponentメソッドの呼び出しが欠落している可能性があります。