misc.log

日常茶飯事とお仕事と

Visual Studio 2008の日本語

Visual Studio 2008のプロジェクトプロパティ画面、「リソース」の所に項目を追加し、そのプロパティである「Persistence」を見てみると、選択肢が

  • 実行時にリンクされました
  • .resxに埋め込まれました

となっている。多分「linked」「embedded」をそのまま直訳したのだろうけど、これはおかしいよね。まだリンクしてるわけでも埋め込んでいる訳でもないわけで。ちなみにSP1適用済み。もしかしてサービスパックで変わった?

XAMLでのバインディング

エッセンシャルWPFのサンプルを追いかけ中。XAMLで書いたチェックボックスの文字列に、別のテキストボックスの入力内容をバインドしてみようとして、以下のような記述をしてみた...。

<TextBox x:Name='SampleText'>テキストボックス(編集可能)</TextBox>
<CheckBox Content='{Binding ElementName=SampleText,Path=Text}'>チェックボックス</CheckBox>

で、MSBuildでビルドしてみると

"C:\Temp\WPFTest1\tour.csproj" (既定のターゲット) (1) -> (MarkupCompilePass1 ターゲット) ->
  C:\Temp\WPFTest1\MyWindow.xaml(24,76): error MC3024: 'System.Windows.Controls.CheckBox.Content' プロパティは既に設定されています。設定できるのは一度だけです。 行 24 位置 76.

なんてエラー。何がまずいかというと、すでに「チェックボックス」という文字が入っていることが「1度目のバインド」にあたるみたい。文字列の設定であっても、内部処理ではリソースへのバインドという扱いになってるのね。

<TextBox x:Name='SampleText'>テキストボックス(編集可能)</TextBox>
<CheckBox Content='{Binding ElementName=SampleText,Path=Text}' />

上記のように、初期文字列を無しにしてやれば問題無かった。

手書きXAMLでサンプル

エッセンシャルWPF(asin:4798114200)を見ながら、とりあえずやってみるテスト。MSBuildも使ったこと無かったので、まずは手書きXAMLMSBuildでビルドしてアプリを動かしてみる実験。ホント基礎の基礎だね。用意するものは

  • アプリケーション定義を書いたapp.xamlファイル
  • ウィンドウ定義を書いたMyWindow.xamlファイル
  • 上記2ファイルをインクルードしてビルドするMSBuild用ファイル

すっかりぬるいVisual Basicの世界で暮らして長いので、MSBuild用の定義とか、大文字小文字間違いとかで何度もエラーを出しながら、ビルド。動かす。で、フォーム一杯に広がったボタンだけのアホみたいなWPFアプリケーション作成稼働風景が右の画像。

ちなみに、Visual Studioしか使ってない人が多分陥るであろうポイントとして、テキストファイル手書きでソースをコンパイラに渡す場合、ファイルはUTF-8とかでエンコードしておかないとコケます。その点忘れないように。

■app.xaml
<Application
	xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
	StartupUri='MyWindow.xaml'
	/>
■MyWindow.xaml
<Window xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' Title='Hello World'>

	<Button>こんにちは</Button>

</Window>
■tour.build
<Project
	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='WindowsBase' />
		<Reference Include='PresentationCore' />
		<Reference Include='PresentationFramework' />
	</ItemGroup>

	<ItemGroup>
		<Page Include='MyWindow.xaml' />
		<ApplicationDefinition Include='app.xaml' />
	</ItemGroup>

	<Import Project='$(MSBuildBinPath)\Microsoft.CSharp.targets' />
	<Import Project='$(MSBuildBinPath)\Microsoft.WinFX.targets' />

</Project>

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

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