WPF 入門

ホーム > WPF の基本 > XAML を利用する WPFプログラムを C# コンパイラだけでビルドする - イベントの追加

XAML を利用する WPFプログラムを C# コンパイラだけでビルドする - イベントの追加

前回 XAML を利用する WPF プログラムを作成しましたが、そこではウィンドウを定義しただけで、イベントを受け取るなどの有意な作業をすることはできていませんでした。

ここでは XAML でボタンを追加して、そのボタンを押したときにポップアップメッセージを表示するようなイベントハンドラを定義する方法を示します。

XAML の変更

XAML 内で次のようにボタン (Button) 要素を追加します。ボタンの名前を okButton という名前にしています。

<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	Title="Hello, WPF!"
>
<Button x:Name="okButton" Width="200" Height="50">OK</Button>
</Window>

プログラムのコードは次のようになります。 XamlReader で XAML を読み込んだ後にイベントハンドラを設定するところがキモです。

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;

namespace TestApp {
	public class App1 {
		[STAThread]
		public static void Main() {
			Application app = new Application();
			Window window = null;
			using( FileStream fs = new FileStream("mainwindow.xaml", FileMode.Open, FileAccess.Read) ){
				window = (Window) XamlReader.Load(fs);
			}
			Button okButton = (Button) window.FindName("okButton");
			okButton.AddHandler(
				Button.ClickEvent,
				new RoutedEventHandler(okButton_Click)
			);
			window.Show();
			app.Run(window);
		}

		public static void okButton_Click(object sender, RoutedEventArgs e){
			MessageBox.Show("Hello, Button!");
		}
	}
}

FindName メソッドは WPF で使われるメソッドで、名前を使って XAML 内の要素を返します。ここでは okButton は Button 要素なので、 返った結果を Button でキャスト可能です。

取得したボタンオブジェクトに対して、AddHandler を用いて RoutedEventHandler を設定しています。

上記コードを css でビルドします。

SET REFPATH=C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
csc /t:winexe /r:"%REFPATH%\PresentationCore.dll" 
/r:"%REFPATH%\PresentationFramework.dll" /r:"%REFPATH%\WindowsBase.dll" 
main.cs

実行結果は次のとおりです。

WPF プログラムの作成

ちゃんとレイアウトしていないので、見栄えはしませんがボタンがあることはわかります。このボタンをクリックすると、次のようにメッセージが表示されました。

WPF プログラムの作成

確かにイベントハンドラが動作していることは確認できました。

ホーム > WPF の基本 > XAML を利用する WPFプログラムを C# コンパイラだけでビルドする - イベントの追加