【WPF】【Blend 4 SDK】SetDataStoreValueActionを使ってみた。
- 2011.08.13 Saturday
- 13:03
JUGEMテーマ:コンピュータ
Source and Project
Blend 4 SDKに付属している組み込みビヘイビアー「SetDataStoreValueAction」を使ってみました。
サンプルコードを紹介する前にSetDataStoreValueActionとChangePropertyActionの違いを紹介します。SetDataStoreValueActionはChangePropertyActionから派生したクラスです。機能として実現できることの違いはないようです。
では何が違うのかというと
・コードレベルでの違い。
[DefaultTrigger(typeof(UIElement), typeof(EventTrigger), "Loaded")]
public class SetDataStoreValueAction : ChangePropertyAction
{
}
と、属性が付いていて、デザインツール(Blend 4)使用時にビヘイビアをボトペタすると、EventTriggerのターゲットとなるイベントがLoadedに自動的にコードが生成されます。
ただし、ButtonなどにボトペタするとClickイベントが自動的に割り当てられる事を確認しています。ButtonのLoad時にアクションが動作されても誰もうれしくないので、納得できる仕様です。
・Blend 4でのデザインの違い。
Blend 4を利用してアプリケーションを作ろうと場合は、SetDataStoreValueActionとChangePropertyActionの違いが顕著に表れます。
【SetDataStoreValueActionをボトペタした場合のプロパティの見た目】
【ChangePropertyActionをボトペタした場合のプロパティの見た目】
Blendは開発ツールではありますが、デザインツールでもあります。そのため、設定できる項目を全て列挙するという形式をとらず、コントロールの使用目的に併せて恣意的に利用しやすいような形でツールがデザインされているようです。SetDataStoreValueActionは、その名前や説明を読む限りデータストアを利用するビヘイビアなのでBlend 4のプロパティではデータストアを利用しやすい形にデザインされていることがわかります。逆にChangePropertyActionは、プロパティの設定と変更時のアニメーション化が目的なのでアニメーション時の 切り替え効果の表示時間を指定できるDurationプロパティがデザインツール上に表示されています。ただし、これはBlend 4のデザインの違いであって、XAMLやコードから設定できる内容に違いはありません。なので、ChangePropertyActionで出来ることはSetDataStoreValueActionでも出来ます。
---------------
補足
【WPF】【Blend 4】データ ストア ピッカーって何?
http://pro.art55.jp/?eid=1303852
---------------
・使い方とサンプルコード
SetDataStoreValueActionとEventTriggerを組み合わせた場合
EventTriggerで指定されたイベントが発生したタイミングで
SetDataStoreValueActionで指定したプロパティに値を設定します。
主な利用目的はデータストアをターゲットにしたアクションですが、今回はシンプルなコードを紹介したいため、単純にコントロールのプロパティを変更するコードにしました。
サンプルコードは
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" x:Class="SetDataStoreValueAction20110813_002.MainWindow"
Title="MainWindow" Height="200" Width="250">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Content="レッツ ハイハイ" Grid.Row="0" Margin="4">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:ChangePropertyAction PropertyName="Text"
TargetObject="{Binding ElementName=textBlock}"
Value="よち"
Increment="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<TextBlock x:Name="textBlock"
Margin="4"
Grid.Row="1"
TextWrapping="Wrap" Text="赤ちゃんが"/>
</Grid>
</Window>
今回はIncrementをTrueに設定してみました。IcrementがTrueの場合は、ターゲットのプロパティが追加可能ば型の場合はプロパティに追加されます。不可能な場合は値を書き換えます。
Buttonがクリックされたタイミングで、下部にあるTextBlockの文字列に「よち」という文字列が追加されます。
実際に実行してみると
と文字列が追加されていくことが確認できました。
データストアを利用したサンプルコードは後日(気が向いたら)紹介させていただきます。
Source and Project
----------------
メモ
IncrementプロパティがTrueの場合はDurationプロパティが利用できず、実行時にエラーとなります。
----------------
----------------
当記事で紹介しているサンプルコードはBlend 4 SDKを使用しています。
Microsoft Expression Blend 4 Software Development Kit (SDK) for .NET 4
http://www.microsoft.com/downloads/ja-jp/details.aspx?displaylang=ja&FamilyID=75e13d71-7c53-4382-9592-6c07c6a00207
----------------