WisdomSoft - for your serial experiences.

2.1 最初の WPF アプリケーション

ウィンドウを表示するだけのシンプルな WPF アプリケーションを作成する方法を紹介します。

2.1.1 ウィンドウの表示

WPF は、新しいプログラミング モデルを採用している新しい API なので、従来の .NET フォームアプリケーションで利用していた System.Windows.Forms 名前空間は使いません。System.Windows.Forms 名前空間に代わって、WPF では、主に System.Windows 名前空間を使います。

まず最初に、WPF を用いてウィンドウを表示するだけの最もシンプルなアプリケーションを作成してみましょう。表示するウィンドウには何も表示されません。ウィンドウを閉じると、アプリケーションは終了します。

コード01
using System;
using System.Windows;

class Test {
	[STAThread]
	public static void Main() {
		Application app = new Application();
		app.Run(new Window());
	}
}
実行結果
コード01 実行結果

System.Windows.Application クラスは、WPF アプリケーションの実行や停止を管理するクラスです。WPF アプリケーションでは、最初に Application クラスのインスタンスを生成しなければなりません。

System.Windows.Application クラス
System.Object
    System.Windows.Threading.DispatcherObject
        System.Windows.Application
public class Application : DispatcherObject

Application クラスのコンストラクタは、引数を何も受け取らない空のコンストラクタです。

Application クラスのコンストラクタ
public Application ()

インスタンスを生成することができれば、Run() メソッドを呼び出すことで WPF アプリケーションを起動することができます。Run() メソッドによって WPF が起動している間、Run() メソッドは制御を返しません。

Application クラス Run() メソッド
public int Run ()
public int Run (Window window)

Run() メソッドを起動すると、WPF アプリケーションが開始されます。window パラメータにウィンドウオブジェクトを渡した場合は、指定したウィンドウがアプリケーションの主ウィンドウとして、アプリケーション実行時に開かれます。

Run() メソッドの戻り値は、アプリケーションの終了コードを表します。この値は、アプリケーションを起動したシステムに返される任意の値です。既定では 0 が返されます。

画面に表示されるウィンドウは System.Windows.Window クラスのインスタンスです。

System.Windows.Window クラス
System.Object
    System.Windows.Threading.DispatcherObject
        System.Windows.DependencyObject
            System.Windows.Media.Visual
                System.Windows.UIElement
                    System.Windows.FrameworkElement
                        System.Windows.Controls.Control
                            System.Windows.Controls.ContentControl
                                System.Windows.Window
[LocalizabilityAttribute(LocalizationCategory.Ignore)] 
public class Window : ContentControl

Window クラスは、見慣れない数多くのクラスから派生していますが、上位クラスで定義されている様々な機能については、今後、徐々に解説していきます。まずは、単純にインスタンスを生成して表示するだけの過程を見てみましょう。

Window クラスのコンストラクタは、パラメータを何も受け取りません。

Window クラスのコンストラクタ
public Window ()

コード01では、Application インスタンスを生成し、その後に Run() メソッドのパラメータに Window インスタンスを生成して渡しているというだけです。生成した Window インスタンスがユーザーの操作によって閉じられると、WPF アプリケーションは終了して Run() メソッドは制御を返します。

また、WPF アプリケーションを構築する場合は Main() メソッドに System.STAThreadAttribute 属性を設定し、COM スレッド モデルがシングル スレッド アパートメントであることを明示しなければなりません。COM スレッド モデルは、COM を利用するアプリケーションに設定する属性です。

これは、従来の .NET アプリケーションが描画に利用していた GDI+ と呼ばれている API セットが、古くから使われている GDI と呼ばれる Win32 用の API をラッピングしているだけだったのに対して、WPF が DirectX API を利用しているためです。WPF は、古い設計の GDI ではなく、DirectX を用いてハードウェア アクセラレーションを実現しているのです。