WPF - Tree

2경빈·2024년 12월 18일

C#

목록 보기
9/14

WPF에서 논리적 트리(Logical Tree)시각적 트리(Visual Tree)는 UI 요소를 구성하고 관리하는 중요한 개념이다. 각각의 트리는 WPF가 UI를 렌더링하고 이벤트를 처리하는 방식과 밀접하게 관련되어 있다.

1. 논리적 트리 (Logical Tree)

정의

논리적 트리는 UI 요소 간의 논리적 관계를 나타낸다. 요소들이 부모-자식 관계로 구성되어 있으며, XAML에서 정의된 UI 구조와 일치한다.

특징:

  • 데이터 바인딩, 리소스 탐색(StaticResource/ DynamicResource), 스타일 적용에 사용된다.
  • 요소의 계층 구조가 간단하며, 사용자 정의 컨트롤과 콘텐츠 모델(Content Model)이 포함된다.
  • 논리적 트리는 개발자가 UI를 이해하고 설계할 때 가장 먼저 참고하는 트리이다.

ex)

<Window>
    <StackPanel>
        <Button Content="Click Me"/>
    </StackPanel>
</Window>

위의 경우 논리적 트리는 다음과 같다.

Window
  └── StackPanel
        └── Button

2. 시각적 트리 (Visual Tree)

정의

시각적 트리는 WPF가 UI를 렌더링하기 위해 사용하는 요소의 세부적인 계층 구조를 나타낸다. UI의 모든 시각적 객체(예: 컨트롤, 도형, 텍스트 등)가 포함된다.

특징

  • 시각적 트리는 화면에 그려지는 모든 요소를 포함하며, 논리적 트리보다 훨씬 세부적이다.
  • 버튼과 같은 컨트롤은 여러 하위 시각적 요소(예: Border, ContentPresenter)로 구성된다.
  • 이벤트 라우팅(Routed Events)과 렌더링이 시각적 트리를 기반으로 작동한다.

예시
같은 XAML 구조를 시각적 트리로 보면 다음과 같다.

Window
  └── AdornerDecorator
        └── StackPanel
              └── Button
                    ├── ButtonChrome
                    └── ContentPresenter

여기서 ButtonChrome은 버튼의 시각적 스타일을 담당하고, ContentPresenter는 버튼 콘텐츠를 표시한다.

3. 주요 차이점

특성논리적 트리시각적 트리
역할UI 요소의 논리적 관계 표현UI 요소의 시각적 표현 및 렌더링 관리
포함 요소컨테이너, 컨트롤 등논리적 트리 + 렌더링에 필요한 모든 시각적 요소
용도데이터 바인딩, 리소스 탐색, 스타일 관리이벤트 라우팅, 화면 렌더링
복잡성상대적으로 단순함복잡하고 세부적임

4. 논리적 트리와 시각적 트리 확인 방법

논리적 트리

LogicalTreeHelper 클래스를 사용하여 확인 가능

  var children = LogicalTreeHelper.GetChildren(parentElement);

시각적 트리

VisualTreeHelper 클래스를 사용하여 확인 가능:

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parentElement); i++)
{
    var child = VisualTreeHelper.GetChild(parentElement, i);
}

5. 결론

  • 논리적 트리는 UI의 구조와 논리적인 관계를 중점적으로 다루며, 주로 개발자가 설계할 때 이해하기 쉽다.
  • 시각적 트리는 UI 렌더링 및 이벤트 처리를 위한 세부적인 정보가 포함되어 있다
  • 두 트리는 함께 동작하며 WPF의 강력한 UI 기능을 지원한다.

ex)

profile
eggs before hatching

0개의 댓글