2009-02-05 11 views
4

컨트롤을 기반으로하는 사용자 지정 Silverlight 컨트롤을 작성했습니다. 두 개의 DependencyProperties Top과 Bottom이 있는데 둘 다 특정 레이아웃 디스플레이에 대한 자식 컨트롤을 보유합니다. 그런 다음 ControlTemplate을 사용하여이 두 컨트롤을 격자로 정렬하고 하나를 0 행에, 다른 하나를 1 행에 배치합니다. 문제는 각 자식 컨트롤의 Parent 속성이 내 사용자 지정 컨트롤을 가리키는 방법을 알아낼 수 없다는 것입니다. 런타임에 각 컨트롤을 검사 할 때 각 컨트롤의 Parent 속성은 null입니다.Silverlight에서 FrameworkElement의 Parent 속성을 설정하는 방법은 무엇입니까?

이것은 간단한 예이지만 일반적인 문제를 볼 수 있다고 생각합니다. 나는이 문제를 모두 공유하는 더 복잡한 컨트롤을 많이 가지고있다. 내가 놓친 일부 마법이 있음을 압니다. ContentControl의 Content 속성이 어떤 자식으로 설정되면 어떻게 든 그 자식의 부모를 자신에게 설정합니다.

편집 : 조금 더 정보

WPF에서, 하나는 부모/자식 관계를 관리 AddVisualChild(), RemoveVisualChild(), AddLogicalChild(), RemoveLogicChild()와 같은 기능을 사용할 수 있지만이 기능은 Silverlight에서는 사용할 수 없습니다.

답변

4

꽤 많은 연구 끝에 나는 이것이 가능하지 않다고 믿습니다. 궁극적 인 목표를 달성하기 위해 VisualTreeHelper을 사용하는 로직 트리 대신 시각적 트리를 통해 재귀 할 수있었습니다.

+1

수정하십시오. 부모는 시각적 트리를 만들 때 프레젠테이션 프레임 워크 자체에 의해 설정됩니다. –

+0

나는 바보처럼 내 자신의 대답을 마킹한다고 느낀다. 그러나 꽤 오랜 시간이 지난 후에 나는 더 좋은 대답을 보지 못했다. –

1

Parent 속성은 임의 일 수 없으며 렌더링 할 때 사용할 컨트롤의 실제 부모를 반영합니다.

MSDN : 요소가 인스턴스화되었지만 결국 페이지 수준 루트 요소에 연결되는 논리 트리 또는 응용 프로그램 개체에 연결되지 않은 경우 부모는 null 참조 (Visual Basic의 경우 Nothing) 일 수 있습니다. . 요소의 부모를 변경

...

는 일반적으로 만, 또는 요소의 컨텐츠 속성을 설정을 통해 방법을 전용 추가를 사용하거나 제거하여 컬렉션의 조작을 통해 이루어집니다.

+0

오른쪽. 따라서 사용자 정의 컨트롤을 작성할 때 Content 속성을 설정하거나 Children 컬렉션에서 요소를 자식으로 추가하여 어떻게 복제 할 수 있습니까? –

관련 문제