다음을 통해 공유


기본 요소 개요

WPF(Windows Presentation Foundation) 클래스에는 SDK 문서에서 일반적으로 기본 요소 클래스라고 하는 4가지 클래스에서 파생된 클래스가 많습니다. 이러한 클래스는 UIElement, FrameworkElement, ContentElementFrameworkContentElement입니다. DependencyObject 클래스는 UIElementContentElement의 공통 기본 클래스이므로 이 클래스도 관련됩니다.

WPF 클래스의 기본 요소 API

UIElementContentElement 모두 여러 경로를 통해 DependencyObject에서 파생됩니다. 이 수준에서 분할은 UIElement 또는 ContentElement가 사용자 인터페이스에서 사용되는 방식과 애플리케이션에서 수행되는 역할을 처리합니다. 클래스 계층 구조에서 UIElement에도 WPF(Windows Presentation Foundation)의 기반이 되는 하위 수준 그래픽 지원을 노출하는 클래스인 Visual이 있습니다. Visual은 독립적인 직사각형 화면 영역을 정의하여 렌더링 프레임워크를 제공합니다. 실제로 UIElement는 대형 개체 모델을 지원하고 직사각형 화면 영역으로 표현할 수 있는 영역으로 렌더링하고 배치하기 위한 요소이며, 콘텐츠 모델이 의도적으로 더 개방적일 경우 다양한 요소를 조합할 수 있도록 만들어졌습니다. ContentElementVisual에서 파생되지 않습니다. 이 모델에서 ContentElement는 요소를 해석한 다음, 소비할 WPF(Windows Presentation Foundation)의 전체 Visual을 생성하는 reader나 뷰어와 같은 다른 요소에서 소비됩니다. 특정 UIElement 클래스는 콘텐츠 호스트가 되어 ContentElement 클래스 하나 이상에 호스팅과 렌더링을 제공합니다(DocumentViewer는 이러한 클래스의 예임). ContentElement는 다소 작은 개체 모델이 있는 요소의 기본 클래스로 사용되며 UIElement 내에서 호스트될 수 있는 텍스트, 정보 또는 문서 콘텐츠를 더 많이 처리합니다.

프레임워크 수준 및 코어 수준

UIElementFrameworkElement의 기본 클래스 역할을 하며 ContentElementFrameworkContentElement의 기본 클래스 역할을 합니다. 이 다음 수준의 클래스를 사용하는 이유는 WPF 프레임워크 수준과 분리된 WPF 코어 수준을 지원하기 위함입니다. API가 PresentationCore 어셈블리와 PresentationFramework 어셈블리 간에 분할되는 방식에도 이러한 분할이 존재합니다. WPF 프레임워크 수준은 프레젠테이션을 위한 레이아웃 관리자의 구현을 포함하여 기본 애플리케이션 요구 사항을 충족하는 보다 완벽한 솔루션을 제공합니다. WPF 코어 수준은 추가 어셈블리의 오버헤드 없이 대부분의 WPF를 사용할 수 있습니다. 가장 일반적인 애플리케이션 개발 시나리오의 경우 이러한 수준 간의 구분이 거의 문제가 되지 않습니다. 일반적으로 WPF API를 전체적으로 고려하여 WPF 프레임워크 수준과 WPF 코어 수준을 구분하지 않아도 됩니다. 전체 솔루션에 이미 UI(사용자 인터페이스) 구성과 레이아웃 구현이 있는 경우와 같이 애플리케이션 디자인에서 WPF 프레임워크 수준 기능의 실질적인 상당한 부분을 대체하도록 선택하는 경우에는 이러한 수준 구분을 알고 있어야 합니다.

파생될 요소 선택

WPF를 확장하는 사용자 지정 클래스를 만드는 가장 실질적인 방법은 WPF 클래스 중 하나에서 기존 클래스 계층 구조를 통해 원하는 기능을 가능한 많이 가져올 수 있는 클래스가 파생되는 것입니다. 이 섹션에서는 상속할 클래스를 결정하는 데 도움이 되는 가장 중요한 세 가지 요소 클래스와 함께 제공되는 기능을 나열합니다.

실제로 WPF 클래스에서 파생되는 가장 일반적인 이유 중 하나인 컨트롤을 구현하는 경우 실제 컨트롤, 컨트롤 패밀리 기본 클래스 또는 적어도 Control 기본 클래스에서 파생되도록 할 것입니다. 몇 가지 지침과 실제 예제는 컨트롤 제작 개요를 참조하세요.

컨트롤을 만들지 않고 계층 구조의 더 높은 수준에 있는 클래스에서 파생되어야 하는 경우 다음 섹션이 각 기본 요소 클래스에 정의된 특성에 대한 지침으로 사용됩니다.

DependencyObject에서 파생되는 클래스를 만들면 다음 기능이 상속됩니다.

  • GetValueSetValue 지원, 일반 속성 시스템 지원

  • 종속성 속성 및 종속성 속성으로 구현되는 연결된 속성을 사용할 수 있는 기능

UIElement에서 파생되는 클래스를 만들면 DependencyObject에서 제공하는 기능 외에 다음 기능이 상속됩니다.

  • 애니메이션 속성 값에 대한 기본 지원 - 자세한 내용은 애니메이션 개요를 참조하세요.

  • 기본 입력 이벤트 지원 및 명령 지원 - 자세한 내용은 입력 개요명령 개요를 참조하세요.

  • 레이아웃 시스템에 정보를 제공하도록 재정의될 수 있는 가상 메서드

UIElement에서 파생되는 클래스를 만들면 DependencyObject에서 제공하는 기능 외에 다음 기능이 상속됩니다.

  • 스타일 지정 및 스토리보드 지원 - 자세한 내용은 Style스토리보드 개요를 참조하세요.

  • 데이터 바인딩 지원 - 자세한 내용은 데이터 바인딩 개요를 참조하세요.

  • 동적 리소스 참조 지원 - 자세한 내용은 XAML 리소스를 참조하세요.

  • 속성 값 상속 지원 및 프레임워크 서비스(예: 데이터 바인딩, 스타일 또는 레이아웃의 프레임워크 구현)에 대한 속성 조건을 보고하는 데 도움이 되는 메타데이터의 기타 플래그 - 자세한 내용은 프레임워크 속성 메타데이터를 참조하세요.

  • 논리 트리의 개념 - 자세한 내용은 WPF의 트리를 참조하세요.

  • 레이아웃에 적용되는 속성의 변경 사항을 검색할 수 있는 OnPropertyChanged 재정의를 포함하여 레이아웃 시스템의 실제 WPF 프레임워크 수준 구현 지원

UIElement에서 파생되는 클래스를 만들면 DependencyObject에서 제공하는 기능 외에 다음 기능이 상속됩니다.

FrameworkContentElement에서 파생되는 클래스를 만들면 ContentElement에서 제공하는 기능 외에 다음 기능을 가져옵니다.

  • 스타일 지정 및 스토리보드 지원 - 자세한 내용은 Style애니메이션 개요를 참조하세요.

  • 데이터 바인딩 지원 - 자세한 내용은 데이터 바인딩 개요를 참조하세요.

  • 동적 리소스 참조 지원 - 자세한 내용은 XAML 리소스를 참조하세요.

  • 속성 값 상속 지원 및 프레임워크 서비스(예: 데이터 바인딩, 스타일 또는 레이아웃의 프레임워크 구현)에 대한 속성 조건을 보고하는 데 도움이 되는 메타데이터의 기타 플래그 - 자세한 내용은 프레임워크 속성 메타데이터를 참조하세요.

  • 레이아웃 시스템 수정 사항(예: ArrangeOverride)에 대한 액세스 권한은 상속되지 않습니다. FrameworkElement에서만 레이아웃 시스템 구현을 사용할 수 있습니다. 그러나 레이아웃에 적용되는 속성의 변경 사항을 검색하고 모든 콘텐츠 호스트에 이러한 변경 사항을 보고할 수 있는 OnPropertyChanged 재정의가 상속됩니다.

컨텐츠 모델은 다양한 클래스에서 사용할 수 있도록 문서화되어 있습니다. 클래스의 콘텐츠 모델은 파생될 적절한 클래스를 찾을 때 고려해야 할 요소입니다. 자세한 내용은 WPF 콘텐츠 모델을 참조하세요.

기타 기본 클래스

DispatcherObject

DispatcherObject는 WPF 스레딩 모델 지원을 제공하며 WPF 애플리케이션에 만든 모든 개체를 Dispatcher에 연결할 수 있습니다. UIElement, DependencyObject 또는 Visual에서 파생하지 않더라도 이 스레딩 모델 지원을 가져오려면 DispatcherObject에서 파생을 고려해야 합니다. 자세한 내용은 스레딩 모델을 참조하세요.

시각 효과

Visual은 일반적으로 대략적인 직사각형 영역에 시각적으로 표현하는 데 필요한 2D 개체의 개념을 구현합니다. Visual의 실제 렌더링은 자체 포함되지 않은 다른 클래스에서 수행되지만 Visual 클래스에서는 다양한 수준에서 프로세스를 렌더링하는 데 사용되는 알려진 형식을 제공합니다. Visual은 적중 테스트를 구현하지만 적중 테스트 긍정 결과(UIElement에 있음)를 보고하는 이벤트를 노출하지 않습니다. 자세한 내용은 시각적 계층 프로그래밍을 참조하세요.

Freezable

Freezable은 성능상의 이유로 변경 불가능 개체가 필요한 경우 개체의 복사본을 생성하는 방법을 제공하여 변경 가능 개체의 불변성을 시뮬레이션합니다. Freezable 형식은 특정 그래픽 요소(예: 기하 도형 및 브러시)와 애니메이션의 공통 기반을 제공합니다. 특히 FreezableVisual이 아닙니다. Freezable이 다른 개체의 속성 값을 채우기 위해 적용될 때 하위 속성이 되는 속성을 유지할 수 있으며 이러한 하위 속성은 렌더링에 영향을 미칠 수 있습니다. 자세한 내용은 Freezable 개체 개요를 참조하세요.

Animatable

Animatable은 애니메이션 컨트롤 레이어와 일부 유틸리티 멤버를 특별히 추가하여 현재 애니메이션 속성과 애니메이션이 아닌 속성을 구별할 수 있는 Freezable 파생 클래스입니다.

컨트롤

Control은 기술에 따라 컨트롤이나 구성 요소로 다양하게 표현되는 개체 형식에 필요한 기본 클래스입니다. 일반적으로 WPF 컨트롤 클래스는 UI 컨트롤을 직접 나타내거나 컨트롤 구성에 밀접하게 참여하는 클래스입니다. Control을 사용하는 기본 기능은 템플릿 제어입니다.

참고 항목