バインディングをサポートしない限り、ブレンド ビヘイビアはほとんど役に立ちません。私はあなたの傾き動作を再現し、問題なく Blend 4 でバインディングをサポートしているので、どこで間違ったのか正確にはわかりません。おそらく、私の簡単な例を再現して、セットアップの何が問題なのかを推測できます。
依存関係プロパティを使用した (非機能的な) 傾斜動作は次のとおりです。
public class TiltBehavior : Behavior<FrameworkElement>
{
public double TiltFactor
{
get { return (double)GetValue(TiltFactorProperty); }
set { SetValue(TiltFactorProperty, value); }
}
public static readonly DependencyProperty TiltFactorProperty =
DependencyProperty.Register("TiltFactor", typeof(double), typeof(TiltBehavior), new UIPropertyMetadata(0.0));
}
次に、新しいウィンドウを作成し、動作をグリッドにドロップすると、Blend が次のように作成します。
<Grid>
<i:Interaction.Behaviors>
<local:TiltBehavior/>
</i:Interaction.Behaviors>
</Grid>
Blend の [Data Binding...] オプションは、プロパティ タブで使用できます。
これを WPF プロジェクトと Silverlight プロジェクトの両方でテストしました。組み込みの動作、トリガー、およびアクションはすべて、依存関係プロパティを使用することでバインディングをサポートし、すべての Blend サンプルはバインディングを頻繁に使用するため、これが機能する必要があります。
実際には、 のような組み込みの動作FluidMoveBehavior
をグリッドにドロップしDuration
て、依存関係プロパティである がバインドをサポートしていることを確認できます。それがうまくいかない場合、何が起こっているのかわかりません。
それでは、ビヘイビアと呼ばれるこれらの奇妙な獣に対してバインドがどのように機能するかを考えてみましょう。
WPF または Silverlight プログラマーとして、私たちはFrameworkElement
. これには、既定のバインディング ソースを制御するために操作できるというプロパティがあり、オーバーライドしないDataContext
場合、そのプロパティはネストされた要素によって継承されます。
ただし、動作 (およびトリガーとアクション) はタイプではありませんFrameworkElement
。DependencyObject
予想通り、最終的には から派生しています。しかし、から派生した任意のクラスでバインディングを使用できますが、この低レベルでは DependencyObject
使い慣れたものがないため、バインディングでソースを提供する必要があります。それはあまり便利ではありません。DataContext
したがって、動作は (とにかく WPF 上で) から派生し、から派生しAnimatable
ます。クラスは、依存オブジェクトの単純さとフレームワーク要素の複雑さが交差する場所です。このクラスは、ブラシや画像ソースなどのより身近なものの基本クラスでもあります。これらのクラスは、フレームワーク要素の完全な複雑さを必要とするわけではありませんが、関連する要素に制限された方法で参加したいと考えています。Animatable
Freezable
Freezable
Freezable
複雑な魔法のプロセスを通じて、Freezable
インスタンスは継承コンテキストを取得します。これは、インスタンスが最も密接に関連付けられているフレームワーク要素であり、デフォルトのバインディング (ソースのないバインディング) が使用される場合、代わりに関連付けられた要素のがFreezable
使用されます。DataContext
実際、行動について学ぶとき、これAssociatedObject
は中心的な概念です。動作の場合、動作が関連付けられているものです。ただし、重要な点は、すべてのFreezable
オブジェクトがプロキシによってDataContext
それらの を使用できることです。AssociatedObject
このすべての魔法は、Josh Smithが次のように呼んでいるものです。
つまり、Hillberg Freezable Trickにより、Blend ビヘイビアーは、関連付けられた要素のデータ コンテキストをデフォルト ソースとして使用するバインディングをサポートするということになります。その結果、ビヘイビアーのバインディングは、私たちの側で何の努力もせずに「そのまま機能する」ように見えます。このため、ビヘイビアーは何千倍も役に立ちます。