Visual Studio 2008のプロジェクトプロパティ画面、「リソース」の所に項目を追加し、そのプロパティである「Persistence」を見てみると、選択肢が
- 実行時にリンクされました
- .resxに埋め込まれました
となっている。多分「linked」「embedded」をそのまま直訳したのだろうけど、これはおかしいよね。まだリンクしてるわけでも埋め込んでいる訳でもないわけで。ちなみにSP1適用済み。もしかしてサービスパックで変わった?
Visual Studio 2008のプロジェクトプロパティ画面、「リソース」の所に項目を追加し、そのプロパティである「Persistence」を見てみると、選択肢が
となっている。多分「linked」「embedded」をそのまま直訳したのだろうけど、これはおかしいよね。まだリンクしてるわけでも埋め込んでいる訳でもないわけで。ちなみにSP1適用済み。もしかしてサービスパックで変わった?
エッセンシャル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}' />
上記のように、初期文字列を無しにしてやれば問題無かった。
エッセンシャルWPF(asin:4798114200)を見ながら、とりあえずやってみるテスト。MSBuildも使ったこと無かったので、まずは手書きXAMLを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)