カスタムビヘイビアーの作成
ここでは簡単なビヘイビアーを作成してみましょう。今回作成するShowMessageActionは親オブジェクトで特定のイベントが発生したときに、設定された文字列をメッセージボックスに表示します。短いコードですので、まずはコードの全体像を確認しましょう(リスト1)。
using System.Windows;
using System.Windows.Interactivity;
namespace SampleBehaviors.ShowMessageBoxAction
{
public class ShowMessageBoxAction : TargetedTriggerAction<FrameworkElement> {
public static readonly DependencyProperty MessageProperty =
DependencyProperty.Register(
"Message", typeof(string), typeof(ShowMessageBoxAction),
new PropertyMetadata(string.Empty));
/// <summary>
/// メッセージボックスに表示するテキストを設定または取得します。
/// </summary>
public string Message
{
get { return (string)GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
/// <summary>
/// トリガーでイベントを補足した際に呼び出されるアクションです。
/// </summary>
protected override void Invoke(object parameter)
{
MessageBox.Show(Message);
}
}
}
コードとしてはかなりシンプルですので、重要な点のみ解説を行います。
public class ShowMessageBoxAction : TargetedTriggerAction<FrameworkElement>
コントロールで発生したイベントを受け取るようなカスタムビヘイビアーを作成する場合は、TargetedTriggerAction<T>クラスを継承する必要があります。ジェネリックパラメータには、どのコントロールに対するビヘイビアなのかを指定しています。ここではSilverlightのすべてのコントロールからイベントを受け取るため、FrameworkElementを指定しています。
protected override void Invoke(object parameter)
{
MessageBox.Show(Message);
}
TargetedTriggerAction.Invokeメソッドは、親になるコントロールでイベントが発生した場合にビヘイビアーで行うアクションを記述します。
ここではShowMessageBoxActionクラスのMessageプロパティーに設定されたテキストをメッセージボックスに表示しています。
カスタムビヘイビアーの使用
カスタムビヘイビアーのビルドが成功したら、実際に作成したカスタムビヘイビアーをExpression Blendから参照して利用してみましょう。
1. 参照の追加
Expression Blendのメニューで[プロジェクト]-[参照の追加]から、SampleBehaviors.dllを参照すると、アセットライブラリーShowMessageBoxActionが追加されていることが確認できます(図9)。

2. ビヘイビアーの設定
先ほどと同じように、TreeViewにShowMessageBoxActionをドロップし、ビヘイビアーを追加します。今回は、TreeViewのアイテム更新時にアイテムの変更を通知するメッセージを表示するため、ShowMessageBoxActionのMessageプロパティに「アイテムが変更されました。」を設定します(図10)。

3. 実行結果
早速実行してみましょう。TreeViewのアイテムが選択された際に2.で設定したメッセージが表示されることが確認できると思います(図11)。

カスタムビヘイビアーでは、適用したエレメントに対してイベントを追加したり、プロパティに値を設定したりすることができます。ここでは解説を行いませんが、テキストボックスにが未入力の際に入力を促すWatermarkBehaviorを添付のプロジェクトに作成しています。ご興味がある方はダウンロードして確認してください。
