質問: ### 疑問点 WPFで共通な振る舞いを追加したいときにビヘイビアを利用すると思います。 インターネットで調べるとBehaviorクラスを継承したビヘイビアと添付プロパティを利用した添付ビヘイビアを用いるパターンが見受けられました。 この2つのビヘイビアの違いとして私が思いつくのは 構文の違いはあるとして、スタイルで定義できるか否か、振る舞いを適用する型を制限(Behavior)できるかどうかの2点です。 これらを意識しなければ2つのビヘイビアは同じ動作をするものになると解釈していますが、そのほかに使い分ける基準があるのでしょうか? といいますか、どちらのパターンのビヘイビアを作成して使っていますか? ちなみに、添付プロパティを使用してBehaviorクラスを継承したビヘイビアをスタイルで定義することが可能なのでスタイルで定義できるか否かについては違いと呼べないかもしれません。 ### 補足情報(言語/FW/ツール等のバージョンなど) VisualStudio2015 Community(VB/C#) .NetFreamwork4.6.2
回答: まず、ビヘイビアのそれぞれの呼び方は BlendBehavior、AttachedBehavior となるようです。 背景としてmituha様のおっしゃる通り、元々Attached Behaviorのような使われ方をしていてその利便性を共通化させたものがBlend Behaviorになるようです。 もう一度2つの違いを整理しました。 **11つのオブジェクトに同一なビヘイビアを設定できる数** ・BlendBehavior:複数設定可能 ・AttachedBehavior:1つのみ **2デザイナの対応** ・BlendBehavior:対応 ・AttachedBehavior:非対応 ※デザイナで既存のインタラクションパターンを使用することはできない。 **3Behaviorを関連付けるためのコードの長さ** ・BlendBehavior:長い ・AttachedBehavior:短い **4Styleでの関連付け** ・BlendBehavior:非対応(但し、添付プロパティを使えば対応できる) ・AttachedBehavior:対応 **5Behaviorを関連付ける要素の型の制限** ・BlendBehavior:可 ・AttachedBehavior:不可 **6Behaviorが関連づいた要素の取得方法** ・BlendBehavior:AssociatedObject ・AttachedBehavior: PropertyChangedCallbackの引数DependencyObject Attached Behaviorではきちんとカプセル化が行われないので、イベント購読解除忘れに注意が必要のこと。 Interactivity.Behavior vs attached properties Attached Behaviors vs Attached Properties vs Blend Behaviors ちょっとコードは長くなりそうですが、 私はBlendBehaviorに統一しようと思います。 一番ネックになりそうなStyleでの設定も添付プロパティでできそうですし。 WPFのBehaviorをStyleで使う方法