過去記事
全てC#でHello world
XAMLとC#を使ってHello worldアプリケーションを作成しました。ここでは、このHello worldアプリケーションをC#のみで作成します。通常は、画面はXAMLで記述しますしXAMLで記述することを推奨します。ただ、XAMLで書けることは、ほぼ全てC#で記述できます。
C#でクラス ライブラリのプロジェクトを新規作成します。ここではCodeHelloWorldという名前で作成しました。参照設定にWPFで必要な以下の4つの参照を追加します。
- PresentationCore
- PresentationFramework
- WindowsBase
- System.Xaml
MainWindowという名前のクラスを作成して、Windowクラスを継承させます。
namespace CodeHelloWorld { using System.Windows; class MainWindow : Window { } }
Hello worldアプリケーションで作成した画面をコードで組み立てます。InitializeComponentというメソッド内でWindow内のコントロールを組み立てています。基本的にXAMLで設定している内容と1対1に対応していることが確認できます。
namespace CodeHelloWorld { using System.Windows; using System.Windows.Controls; class MainWindow : Window { private Button helloWorldButton; private void InitializeComponent() { // Windowのプロパティの設定 this.Title = "MainWindow"; this.Height = 350; this.Width = 525; // Buttonの作成 this.helloWorldButton = new Button { Content = "Hello world", HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(10, 10, 0, 0), Width = 100 }; this.helloWorldButton.Click += helloWorldButton_Click; // Gridの作成 var grid = new Grid(); grid.Children.Add(this.helloWorldButton); // gridをWindowに設定 this.Content = grid; } public MainWindow() { this.InitializeComponent(); } private void helloWorldButton_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Hello world"); } } }
MainWindowクラスが出来たのでAppクラスを作成します。XAMLを使ったAppクラスではStartupUriで開始時に表示するWindowのXAMLのURIを指定していましたが、ここではXAMLを使っていないのでMainWindowの表示をAppクラスのStartupイベントで明示的に行っています。
namespace CodeHelloWorld { using System; using System.Windows; class App : Application { private void InitializeComponent() { // StartupUriは使えないのでStartupイベントを使う this.Startup += App_Startup; } private void App_Startup(object sender, StartupEventArgs e) { // ウィンドウを作成して表示させるコードを明示的に書く var w = new MainWindow(); w.Show(); } [STAThread] public static void Main(string[] args) { // Appクラスを作成して初期化して実行 var app = new App(); app.InitializeComponent(); app.Run(); } } }
一通りのクラスが出来たので、プロジェクトのプロパティをクラスライブラリからWindowsアプリケーションに変更して実行します。実行すると、XAMLを使った時とおなじ見た目と動作のアプリケーションが起動します。
ここで伝えたかったのは、C#のコードでもXAMLでも同じようにWPFのアプリケーションが作れるという点です。そのことを知ったうえで、XAMLの特性を理解し、どういうときにXAMLで記述し、どういうときにC#で記述すべきなのかということを考えることが必要だということを意識して今後を読み進めてください。