独自のスタートアップコードを定義する
WindowsForms では、ウインドウが表示されるまでに実施しておきたいコードは Program.cs の Main() に記述するのが定石でした。例えば画像入力ボードの初期化やデジタル入出力ボードの初期化などがそれにあたります。
WPFでは Program.cs がありませんし、それ以外のファイルにも Main() がありません。さて、どうしましょうか。
前置きが長くなってしまいました。ようやく具体的な説明にはいります。
App.xaml でスタートアップコードを指定します。デフォルトでは StartupUri="MainWindow.xaml" と書いてあるところを、Startup="スタートアップメソッド名"に書き換えます。
<Application x:Class="aaa.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:aaa"
Startup="Application_Startup"> <!-- this is important. -->
<Application.Resources>
</Application.Resources>
</Application>
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace aaa
{
public partial class App : Application
{
// App.xaml にて Startup="Application_Startup" を明示すること.
private void Application_Startup( object sender, StartupEventArgs e )
{
// ウインドウ表示前にダイアログボックスを表示する.
MessageBox.Show( "Application_Startup();" );
// ウインドウを作成しつつ表示する.
MainWindow wnd = new MainWindow();
wnd.Show();
}
}
}
スタートアップメソッド名はなんでもいいです、MSDNでは Application_Starup としてありましたが、ApplicationStartup とか MyStartup のように、予約語とか予約メソッド名にかぶっていなければ、なんでもかまいません。
あとは、MainWindow wnd = new MainWindow(); より前までに自分のやりたいことを記述すればOKです。コード例ではウインドウが表示される前に、ダイアログボックスを表示します。つまり、デジタル入出力ボードの初期化などはここに書けばいいです。
試しに MainWindow wnd = new MainWindow(); より後に MessageBox.Show(); を書けば、挙動が変わりますので理解が深まると思います。