ブレンドの動作は、バインディングをサポートしない限りほとんど役に立たなくなります。私はあなたの傾きの振る舞いを作り直しました。問題なくブレンド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));
}
それからちょうど新しいウィンドウを作成し、グリッド上に行動をドロップすると、ブレンドは、これを作成します。
<Grid>
<i:Interaction.Behaviors>
<local:TiltBehavior/>
</i:Interaction.Behaviors>
</Grid>
とブレンド "データバインディング..."オプションがプロパティタブで使用できます。
私はこれをWPFプロジェクトとSilverlightプロジェクトの両方でテストしました。組み込みのビヘイビア、トリガ、およびアクションは、依存関係プロパティを使用することによってバインディングをサポートし、すべてのブレンドサンプルはバインディングを頻繁に使用するため、このにはが機能します。
実際にFluidMoveBehavior
のようなビルトインビヘイビアをグリッドにドロップして、依存関係プロパティであるDuration
がバインディングをサポートしていることを確認できます。それが動作しない場合、私はいいえアイデアは何が起こっている!
行動と呼ばれるこれらの変な獣の結合がどのように機能するかを考えてみましょう。
WPFまたはSilverlightプログラマーとして、私たちはFrameworkElement
などのバインディングに非常に精通しています。デフォルトのバインディングソースを制御するために操作できるDataContext
というプロパティがあり、がをオーバーライドすると、そのプロパティがネストされた要素によって継承されます。
しかし、行動(およびトリガーとアクション)はではなくFrameworkElement
のではありません。彼らは最終的にはDependencyObject
から派生しています。しかし、我々はクラスのバインディングをDependencyObject
から派生させることができますが、私たちのおなじみのDataContext
はこの低レベルでは見つからないので、バインディングはソースを供給する必要があります。 これはあまり便利ではないです。
Animatable
およびAnimatable
からの動作は、Freezable
から派生しています(WPFではとにかく)。 Freezable
クラスは、依存性オブジェクトの単純さがフレームワーク要素の複雑さと交差するところです。 Freezable
クラスは、ブラシやイメージソースのようなより親しみやすいものの基本クラスです。これらのクラスは、フレームワーク要素の完全な複雑さを必要としませんが、関連する要素をに限定した形で、に参加したいと考えています。複雑な魔法のような工程により
、Freezable
インスタンスが継承コンテキストを取得:(ソースないもの)、それらが最も密接に関連付けられているフレームワークエレメントを、そして結合デフォルトを使用する場合、Freezable
は、それが関連付けられている要素のDataContext
を使用代わりに。
事実、行動について学ぶとき、AssociatedObject
は中心的な概念です。振る舞いについては振舞いが付いているものです。しかし、重要な点は、すべてFreezable
オブジェクトはAssociatedObject
のDataContext
をプロキシで使用できることです。
すべてこの魔法の呼び出しJosh Smithです:
だから、すべてこれが原因Hillberg Freezableのトリックに、ブレンドの行動が使用してバインディングをサポートすることを言ってまでつながります関連する要素のデータコンテキストをデフォルトのソースとして使用します。その結果、行動の束縛は、私たちの努力なしに「ちょうどうまくいく」ようです。ビヘイビアはこれにより数千倍も役に立ちます。
これは非常に奇妙です。ブレンドのバージョンは何ですか? Blend 4 + Silverlight 4のBehaviorsの依存プロパティに要素プロパティまたはDataContextプロパティをバインドする際に問題はありません。 – dain
Dain、Visual Studio内で手作業でバインドしようとしました。 TiltFactor = "{Binding}"の場合、AG_E_PARSER_BAD_PROPERTY_VALUEとなり、非依存プロパティにバインドしていることがよくあります。ビヘイビアのプロパティをバインディングするWeb上の例を指摘できますか? – ColinE
正しい型の具体的なプロパティにバインドする必要があります:TiltFactor = "{Binding TiltFactor}" – dain