カスタム ビヘイビアーの作成
Behavior は、Trigger または Trigger のようなアイテムからの外部通知がなくても動作します。一定の条件を満たす必要はありますが、必ずしも Trigger で呼び出される必要はありません。
単純 Behavior
外部入力を必要としない Behavior の記述は、極めて容易です。以下に挙げるコード サンプルは、基本的な Behavior の例です。
public class MyBehavior : Behavior<DependencyObject>
{
public MyBehavior()
{
}
protected override void OnAttached()
{
base.OnAttached();
// Insert code that you want to run when the Behavior is attached to an object.
}
protected override void OnDetaching()
{
base.OnDetaching();
}
}
Behavior のクラスを拡張し、Behavior に関連付ける種類を制限できます。
Triggers の OnAttaching および OnDetaching メソッドの場合と同様、Behavior の OnAttached および OnDetaching メソッドで Behaviors とオブジェクトが関連付けられている場合、またはその関連付けが解除されている場合に、実行したい任意のコードを追加することができます。
ビヘイビアーとコマンド
ビヘイビアーの機能のカスタマイズ権限をユーザーに付与するひとつの方法は、Behavior のアクションに対応する Commands (タイプ ICommand のあらゆるプロパティ) を公開することです。まずは、プロジェクトに Microsoft.Expression.Interactions および System.Windows.Interactivity の両方の DLL 参照があることを確認します。次に、新規の Class ファイルを作成し、次のコードを追加します。
public class BehaviorWithCommand : Behavior<DependencyObject>
{
public BehaviorWithCommand()
{
this.MyCommand = new ActionCommand(this.MyFunction);
}
protected override void OnAttached()
{
base.OnAttached();
}
protected override void OnDetaching()
{
base.OnDetaching();
}
public ICommand MyCommand
{
get;
private set;
}
private void MyFunction()
{
// Code to execute when your Command is called
}
}
以下の図は、Commands と Behaviors が連携して、Action のような機能を実現する方法について説明します。
上の図にあるとおり、Behavior は Commands を公開します。既存の Triggers と Actions のパターンを使用して、Behavior に Triggers を追加し、その Triggers に 1 つ以上の InvokeCommandActions を起動させることで、このような Commands を呼び出すことができます。InvokeCommandAction が唯一実行するアクションは、Behavior で公開された Command を呼び出すだけです。