2012-03-30 6 views
1

Xaml内の要素への参照を別の要素から取得したいユースケースがあります。Xaml Binding(AttachedまたはDependencyProperty)を介して別の要素のインスタンスを取得

たとえば、この単純なケースを考えてみましょう。私はAと呼ばれるUserControlとBと呼ばれるUserControlを持っています と何とか私はBがAへの参照を得ることができる付属プロパティを登録したいと思います。

<MyCustomControl Name="A"/> 
<MyCustomControl Name="B" 
       AttachedPropClass.TheOtherControl="{Binding ElementName=A}"/> 

だから私はB.TheOtherControlがAに等しくなるように期待するXAMLでこの可能ですか?注:私はではなく、Aのプロパティにバインドするですが、むしろ要素全体が必要です。

Xamlでこれを可能にするDependencyProperties、AttachedProperties、またはBehaviorsを使用するソリューションはすばらしいでしょう。

編集:私はこれをWPFとSilverlight4の両方で実行しようとしています。私は上記を試して、それは動作しません、Attachedプロパティのコールバックを変更したことは決してヒットしません。

+1

まあ、試しましたか?あなたが書いたコードはきれいに見える... –

+0

はい、私はこれを試したと言っているべきであり、それは動作しません。私はMyCustomControlでDependencyPropertyを試し、ElementName経由でB.TheOtherをAにバインドしました。どちらもうまくいかなかった。私は依存関係プロパティのPropertyChangedコールバックを持っており、決してヒットしません。だから、少なくとも私は何かばかげてやっていないし、上記は構文的に正しいですか?おそらく何か間違ったことがあるでしょう。 –

+1

は 'BindsDirectlyToSource'を試しましたか? –

答えて

2

コントロール名に設定したプロパティでビヘイビアを使用し、コントロールの論理ツリーを検索できます。あるコントロールで特定のイベントを使用して、別のコントロールにフォーカスを移動したい場合も同様のことがあります。これを行うには、コントロール名をビヘイビアに指定します。

<TextBox Name="A"/> 
<TextBox Name="B"> 
    <Interactivity:Interaction.Behaviors> 
     <Behaviours1:ProgressNextOnEnterAction NextTextBoxControlName="A" /> 
    </Interactivity:Interaction.Behaviors> 
</TextBox> 
+0

私は実際にこれに類似したアプローチを使用して終了しました。私は文字列を受け入れ、他の要素の名前で渡された添付プロパティを作成し、それを見つけるためにVisualTreeを歩きました。 AttachedPropsでは、動作だけでなく、これを行うことができます。情報をありがとう!:) –

1

私は何が起こったのか分かりました。

は、このようなあなたの依存関係プロパティを宣言します。

private static readonly DependencyProperty TheOtherControlProperty = 
           DependencyProperty.RegisterAttached(
             "TheOtherControl", 
             typeof(MyCustomControl), 
             typeof(AttachedPropClass),// Change this part 
             null); 

    public static MyCustomControlGetTheOtherControl(MyCustomControltarget) 
    { 
     return (MyCustomControl)target.GetValue(TheOtherControlProperty); 
    } 
    public static void SetTheOtherControl(MyCustomControltarget, TextBlock value) 
    { 
     target.SetValue(TheOtherControlProperty, value); 
    } 

私は問題はあなたがMyCustomControlに代わりのAttachedPropClassに依存プロパティのOwnerTypeを設定することだと思います。

私は動作する例を作成しました。

これを試してみて、私が正しいかどうか教えてください。

u_u

+0

例のおかげで、本当にそれを感謝します。私はこれを試してみてください:) –

+0

更新、MyCustomControlでAttachedプロパティが宣言されていることを除いて、私の持つほとんどのものでした(両方のタイプが同じです)。残念ながら、私が何をしても、私はこれを動作させることができませんでした。ヘルプanycaseありがとう! –

+0

奇妙な...私はそれを再現できるかどうか確認します。 –