2012-02-09 6 views
0

コードビハインドからカスタムMarkupExtensionにアクセスする方法はありますか?例えば。コードからカスタムMarkupExtensionを取得

<TextBox Name="text" Text="{my:CustomExtension}" /> 

私は 'CustomExtension'インスタンスにアクセスできるようにしたいと考えています。

私は独自の軽量バインディングを作成しましたが、これはソリューションの唯一のギャップです。上記のコードをコードから設定した場合、カスタムプロパティのインスタンスを添付プロパティに保持できますが、上記の場合はXAMLパーサーはそれを行いません。

答えて

1

マークアップ拡張は、プロパティが必要なときに「解決」され、その時点ではProvideValueによって提供される値に置き換えられます。あなたはおそらくインスタンスを取得することはできませんあなたがそれを渡すあなたのMarkupExtensionに何かを追加しない限り。

+0

応答HBをありがとう。彼らは彼らが提供する価値に置き換えられるという意味ですか? (上記の例では)TextBoxにはCustomExtensionへの参照がありませんが、ProvideValue()呼び出し後にCustomExtensionがTextBoxへの参照をキャッシュしている可能性はありますか?したがって、TextBoxは、CustomExtensionへの参照とは全く別にProvideValue()が提供する値を保持しています(これは決して*決して*ありません)。 MarkupExtensionに "something"を追加して、それ自体を渡すことができますか? :) – Fil

+0

@Fil:あなたの拡張機能は 'Binding'から継承していますか?その場合、それは少し異なり、バインディングされた式がバインドされたオブジェクトに設定されます。その場合、Textプロパティの['GetBindingExpression'](http://msdn.microsoft.com/en-us/library/system.windows.data.bindingoperations.getbindingexpression.aspx)を使用してその式を取得できます。式の 'ParentBinding'にはあなたのボックス化された' CustomExtension'が入っています。 –

関連する問題