2009-03-05 10 views
8

DependencyObjectDependencyPropertyで使用されるプロパティ継承ツリー(または継承コンテキスト)に関する十分な情報を見つけるのには苦労しています。DependencyObject継承ツリーのカスタマイズ

オブジェクトAが論理親オブジェクトBであるため、オブジェクトAのプロパティに割り当てられた値が自動的にオブジェクトBに伝播するような汎用的なWPFページ外の値継承能力DependencyPropertyを使用したいとします。ローカルに設定されていない限り(WPFでFlowDirectionプロパティが動作するようなビット)。

オブジェクトAとオブジェクトBがDependencyObjectからderieved、およびUIElement子供ではありませんしている場合はDependencyPropertyように(つまり、オブジェクトAは、それが自分のルートだである)、そしてどのように論理ツリーを確立しますBはAの子だと理解していますか?

Hillberg Freezable TrickJosh Smith's bag of tricksは、私が探しているものではありません。私は、既存の要素ツリーからプロパティを取得したい...私は、独自の、非ビジュアルな要素ツリーを作成する...つまり、継承コンテキストを制御できます。

誰かがこの知識体がどこに隠れているか知っていますか?

+1

あなたの問題をどのように解決したのか不思議です。独自のツリー/継承/ DPメカニズムを作成しましたか?あなたの方法であなたを助けるライブラリを見つける?私は似たようなことをしようとしています。 –

答えて

10

DependencyObjectのためのソースコードをmuddling多くの研究の後と、ここで短い答えです:

InheritenceContext(インスタンスの論理上の親を明らかにするプロパティ)(あるDependencyObjectの便利な実装の90%のような)内部としてマークされているので、WindowsBase.dllの外のすべてのコードから隠されている

_contextParentフィールドを設定すると、この非表示のメソッドを呼び出してInheritenceContextを設定することはできますが、その日は清潔な解決策ではありません。

DependencyObjectソースコードを精査した後、私は感心していないと言わなければならない。 DependencyObjectは非常にきれいで、ユビキタスで、再利用可能なクラスでなければならず、またそうすべきでした。 代わりに、構造的にも振る舞いにも継承されており、Freezableが残りのサブクラスと共存できるように、特定の定数、フィールド、メソッド、および回避策が含まれています。これは、 WPFフレームワークの外部では他に優れたクラスをまったく使用できなくします。

+1

この面白い質問への回答に感謝します。言語/コンパイラのサポート(Freezableと同じ)の方が優れているとは思えませんが、この種のプロパティには特定の基本クラスが必要です。 –

+0

あなたが行ったソリューションを共有できますか?あなた自身の "DependencyObject"実装をしましたか? – Nock

0

値自体が値を上書きしない子への伝播について質問しているとします。

子供を持つWPF要素の概念は、私が知る限り、ContentControlによって導入されています。これは、あなたが行きたいと思うよりも、階層をはるかに下回っています。だから、あなたが単にDependencyObjectからこの動作が明らかにならないことを導き出す必要があれば、私は仮定します。

具体的には、子供は特定のプロパティの値を持たない場合、親に尋ねる必要があります。

興味深い質問です。私も完全な答えを知りたいです。