2009-03-05 5 views
8

DependencyObjectDependencyProperty에 의해 사용되는 상속 트리 (또는 상속 컨텍스트)에 대한 충분한 정보를 찾기 위해 고심하고 있습니다.DependencyObject 상속 트리 사용자 지정

개체 A가 논리적 부모 개체 B이므로 개체 A의 속성에 할당 된 값이 개체 B에 자동으로 전파되도록 일반 WPF 페이지 외부에 값 상속 기능 DependencyProperty을 사용하고 싶습니다. 로컬로 설정된 경우가 아니면 (FlowDirection WPF에서 작동하는 것과 같은 비트).

개체 A와 개체 B가 DependencyObject에서 derieved 경우

가 아닌 아이들됩니다 UIElement 당신이 논리적 트리를 구축 어떻게 다음, (즉, 객체 A는이 자신의 루트의이다) DependencyProperty을되도록 B가 A의 자식이라고 이해합니까?

Hillberg Freezable TrickJosh Smith's bag of tricks은 내가 찾고있는 것이 아닙니다. I do not 기존 요소 트리에서 속성을 검색하고 싶습니다 ... 내 비 시각적 요소 트리를 만들고 싶습니다. 즉 상속 컨텍스트를 제어 할 수 있습니다.

누구나이 지식 체계가 숨어있는 곳을 아십니까?

+1

나는 당신이 당신의 문제를 어떻게 해결했는지 궁금합니다. 당신은 자신의 나무/상속/DP 메커니즘을 작성 했습니까? 어떤 방법으로도 도움이되는 도서관을 찾으십니까? 나는 비슷한 것을 시도하고있다. –

답변

10

DependencyObject의 소스 코드를 통해 뒤범벅 많은 연구 후에하고, 여기에 짧은 대답 :

InheritenceContext (인스턴스의 논리적 부모를 드러내는 속성) (이다 DependencyObject의 유용한 구현의 90 %와 같은) 내부로 표시되어 WindowsBase.dll 외부의 모든 코드에서 숨김으로 유지됨

_contextParent 필드를 설정하는 데 리플렉션을 사용할 수 있으며이 숨겨진 메서드를 호출하여 InheritenceContext을 설정하지만 끝에 있습니다. 하루는 깨끗한 해결책이 아닙니다.

DependencyObject 소스 코드를 수색 한 후, 나는 감동하지 않는다고 말하고 싶습니다. DependencyObject은 매우 깨끗하고 유비쿼터스하고 재사용 가능한 클래스 일 수 있었으며 그렇게되어야했습니다. 대신 구조적으로 그리고 행동에 맞게 바인딩 된 상속자이며 심지어는 상수, 필드, 메서드 및 해결 방법이 포함되어있어 Freezable이 나머지 하위 클래스와 공존 할 수 있습니다. 이는 OO 디자인과는 거리가 멀고, WPF 프레임 워크 외부에서 전혀 사용이 불가능한 훌륭한 클래스를 만듭니다.

+1

이 재미있는 질문에 대한 답변을드립니다. 언어/컴파일러 지원 (Freezable과 동일)에 대한 더 나은 솔루션을 생각할 수는 없지만 이러한 유형의 속성에는 특정 기본 클래스가 필요합니다. –

+0

당신이 나간 솔루션을 공유 할 수 있습니까? 자신의 "DependencyObject"구현을 했습니까? – Nock

0

값 자체를 재정의하지 않는 하위 값 전파에 대해 질문하는 것으로 가정합니다.

아이가있는 WPF 요소의 개념은 내가 알고있는 한 ContentControl에 의해 소개됩니다. 이것은 당신이 가고 싶어하는 것보다 훨씬 더 위계 질서에 영향을줍니다. 그래서, 만약 당신이 간단하게 DependencyObject에서이 행동이 명시되지 않았을 파생되었다고 가정합니다.

특히 아동은 주어진 속성에 값이 없는지 부모에게 물어볼 필요가 있습니다.

흥미로운 질문입니다. 나는 완전한 대답을 알고 싶다.

관련 문제