WPF 超入門 〜番外編「エッセンシャル WPF その弐 」

前回は「エッセンシャル WPF」の第一章の冒頭 「新しい GUI として WPF におけるサンプルコードの実行方法について記述しました。今回は「エッセンシャル WPF」17頁の「WPF ツアー」の実行方法について少し書きたいと思います。

エッセンシャルWPF:Windows Presentation Foundation (Programmer's SELECTION)

エッセンシャルWPF:Windows Presentation Foundation (Programmer's SELECTION)


本書の39頁に「アプリケーション構築用のツール」として書いてあるのですが、これだけ読んだだけでは初心者の方には判りづらいと思われます。また、Visual Studio でいちいちプロジェクトを作るのも面倒ですし理解も深まりません。ここは本書のとおり MSBuild を使ってプロジェクトをコンパイルする方向で進めたいと思います。

以下37頁のサンプルコードを実行したところ


全般

MSBuild.exe によるコンパイル

本書のサンプルコードを実行するには、MSBuild.exe を使った方が楽ですし、Visual Studio に依存してるうちは見えない部分の理解も深まると思われます。秀丸等の多機能エディタを使うとコーディングも楽なので、メモ帳しか使ってない方は是非秀丸を導入しましょう。

MSBuild.exe の場所

Visual Studio 2010 がインストールされている場合、MSBuild.exe の場所は

にあります。

バッチファイル

デスクトップにバッチファイルを作っておくと楽にビルドできます。バッチファイルの内容を

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild "C:\Projects\tour.csproj"
PAUSE
C:\projects\bin\debug\Tour.exe

とかにしとけば、後はこれをクリックするだけで OK。


注意事項

プロジェクトファイル

・サンプルコードのプロジェクトファイルですが、シングルクォーテーションをダブルクォーテーションに変更しても問題はありません。(Visual Studio により自動的に作成されるプロジェクトファイルでは ダブルクォーテーション です)

・プロジェクトファイルの を追加すること。これがないとコンパイルできません。(本書のサンプルにはこれが抜けてる)

の行ですが、二度目のコンパイルからは「インポート済み」と警告が発生しますので、二度目のコンパイルからはこの行を削除しても構いません。


以下、プロジェクトファイルの初期設定(18頁)です。

tour.csproj

<Project ToolsVersion="4.0" DefaultTargets="Build" 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <Configuration>Debug</Configuration>
    <Platform>AnyCPU</Platform>
    <RootNamespace>Tour</RootNamespace>
    <AssemblyName>Tour</AssemblyName>
    <OutputType>winexe</OutputType>
    <OutputPath>.\bin\debug</OutputPath>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xaml" />
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
  </ItemGroup>

  <ItemGroup>
    <Compile Include="Program.cs" />
  </ItemGroup>

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(MSBuildToolsPath)\Microsoft.WinFX.targets" />
</Project>


ついでに初期設定の Program.cs ファイルです。

program.cs

using System;
using System.Windows;

class Program {
	[STAThread]
	static void Main() {
		Application app = new Application();
		Window w = new Window();
		w.Title = "Hello World";
		app.Run(w);
	}
}


これをコンパイルして実行すると、こうなります。


XAMLファイル

・サンプルコードの XAML ですが、シングルクォーテーションをダブルクォーテーションに変更しても問題ありません。通常、XAML のコードはダブルクォーテーションを使うので、個人的には慣れるためにもダブルクォートを推奨します。

XAML ファイルは必ず文字コードUTF-8 にして保存すること。でないと、XAML に日本語を含む場合、エラー MC3000:「XML 指定されたエンコードに無効な文字があります。」が発生します。

・大文字小文字の違いには注意してください。


以下、21頁のサンプルコードです。

app.xaml

<Application 
	xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
	StartupUri = 'MyWindow.xaml' >
</Application>

MyWindow.xaml

<Window 
	xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
	Title = "Hello World" >
<Button>こんにちは</Button>
</Window>


以下、変更されたプロジェクトファイル(21頁)です。

tour.csproj

<Project ToolsVersion="4.0" DefaultTargets="Build" 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <Configuration>Debug</Configuration>
    <Platform>AnyCPU</Platform>
    <RootNamespace>Tour</RootNamespace>
    <AssemblyName>Tour</AssemblyName>
    <OutputType>winexe</OutputType>
    <OutputPath>.\bin\debug</OutputPath>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Xaml" />
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
  </ItemGroup>

  <ItemGroup>
    <Page Include="mywindow.xaml" />
    <ApplicationDefinition Include="app.xaml" />
  </ItemGroup>

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>


これをコンパイルして実行すると、こうなります。



後は順次 MyWindow.xaml の内容を編集するだけでOKです。
で、32頁までのサンプルをコーディングしてみるとこうなる・・・


37頁だとこうなります。タグが多いと結構疲れる・・・