XAML を利用する WPFプログラムを C# コンパイラだけでビルドする
前回は原始的な WPF プログラムを C# コンパイラでビルドしました。
それによって、WPF プログラムの基本要素である System.Windows.Application や System.Windows.Window (からの派生クラス) を使うことはできました。
しかしやはり WPF では XAML を用いて UI のレイアウトをできることも目玉の一つですから、それも使ってみましょう。
実はこの辺から既に C# コンパイラひとつで作ることが難しくなってきてしまいます・・・。
Window を XAML で定義
次の内容を MainWindow.xaml として保存します。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Hello, WPF!"> </Window>
ここでは Window 要素がルートになっています。定義しているのは名前空間の他は、ウィンドウのタイトルのみです。ウィンドウのタイトルを "Hello, WPF!" としています。
XamlReader で XAML を読み込む
プログラムのコードは、次のとおり。これを main.cs とします。
using System; using System.IO; using System.Windows; 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); } window.Show(); app.Run(window); } } }
.NET Framework の標準の FileStream (System.IO) で XAML ファイルを開き、それを XamlReader でロードしています。
XamlReader の Load メソッドの戻り値として Window が返ります。返された Window オブジェクトを Application の Run メソッドに渡しています。
ビルド方法は前回と同様です。
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
この結果生成された main.exe を起動すると次のようなウィンドウが表示されました。
確かにウィンドウのタイトルに、XAML で指定した文字列 "Hello, WPF!" が見え、XAML が読み込まれたことがわかりますね。