読者です 読者をやめる 読者になる 読者になる

だるろぐ

とてもだるだるした日記です http://about.daruyanagi.jp/

お知らせ

最初に生成されたウィンドウがメインウィンドウ

WPF C#
<Application x:Class="SoundKeyboard2012.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        
    </Application.Resources>
</Application>

こう書いたら、MainWindow がメインウィンドウになると思うじゃないですか。けれど、WPF って「最初に生成されたウインドウがメインウィンドウになる」んだね。Windows型のメンバ変数をフィールドで初期化していた( public Window HogeWindow = new HogeWindow() )ので、デバッグ時の動作(MainWindow.xaml がメインウィンドウ)と、リリースバイナリの動作(HogeDialog.xamlがメインウィンドウ)が違っていて、ちょっと困った。

private void Application_Startup(object sender, StartupEventArgs e)
{
    MainWindow = new MainWindow();
}

明示的にメインウィンドウを指定してあげれば問題ない。

StartupUri を宣言で設定してもプログラムで設定しても、対応する UI リソースは Startup イベントが処理されるまで読み込まれません。 したがって、Startup の処理時には、Windows プロパティまたは MainWindow プロパティからのウィンドウにアクセスできません。

Application.StartupUri プロパティ (System.Windows)

MainWindow には、AppDomain でインスタンス化される最初の Window オブジェクトへの参照が自動的に設定されます。

Application.MainWindow プロパティ (System.Windows)