2011-02-15 5 views
7

좋아, UIElement의 직접 하위 클래스 인 Parent 속성이 있지만 패널에 FrameworkElement (어린이 유형은 UIElementCollection이 아님)이 아닌 UIElement 유형의 하위 항목이 있습니다. 이는 바로 UIElement을 추가 할 수 있음을 의미합니다. 패널에.어떻게 UIElement의 부모를 얻을 수 있습니까?

UIElement이 있고 그 패널이 부모 인 패널인지 알고 싶다면 테스트하는 방법을 알고있는 유일한 방법은 VisualTreeHelper이지만 시각적 트리가 아니라 논리 트리입니다. (적어도 우리는 패널에 템플릿이 없으므로 아마도 그런 식으로 생각할 것입니다.)

따라서 VisualTreeHelper을 제외하고 어느 패널이 UIElement의 부모인지 알 수 있습니까? (... 그리고 왜 단지 부모 속성을 FrameworkElement 대신에 정의하지 않았는지 생각해보십시오.)

고마워요!

답변

6

글쎄, 논리 부모를 찾으려면 VisualTreeHelper과 같은 방식으로 LogicalTreeHelper을 사용할 수 있습니다.

"...에 대한 설명은 단지 FrameworkElement 대신에 부모 속성을 정의하지 않은 이유가 무엇입니까?". 기본적으로 "논리 트리"개념은 FrameworkElement 레벨에 도입되었습니다. FrameworkElementUIElement에 추가되는 내용은 http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.aspx (설명 참조)을 참조하십시오. 여기가 논리 나무에 대해 말씀입니다 :

논리적 트리 : 일반적인 WPF 프로그래밍 모델은 종종 요소의 트리 인 측면에서 을 표현한다. 트리의 트리를 논리 트리로 표현할 수 있도록 지원하고 트리를 태그에 정의하는 지원을 수반하는 이 FrameworkElement 수준에서 구현됩니다. 그러나 FrameworkElement는 의도적으로 이 콘텐츠 모델을 정의하지 않고 은 해당 클래스에서 파생 된 클래스 인 을 남겨 둡니다. 자세한 내용은 Trees in WPF을 참조하십시오.

+0

나는 diff를 알고 있습니다. 물리적 트리와 논리적 트리 사이. 그건 내가 요구 한 것이 아니다. 또한 Canvas가 시각적 트리의 일부일 수 있으므로 LogicalTreeHelper를 사용할 수 없습니다. 그러나 나는 부모에 대한 당신의 견해를 보았습니다. 내 주장은 왜 그렇게 별도의 VisualParent를 만들지 않을까? 부모님 패널을 얻으려면 VisualTreeHelper (그리고 어쩌면 붙인 방법)를 사용하는 것 외에는 선택의 여지가 없다. 기술적으로는 대답이 아니지만, 어쨌든 나는 그 것처럼 보이지 않으므로 그걸로 표시하고 있습니다. – MarqueIV