다음을 통해 공유


Windows Forms 디자이너 프레임워크와 WPF Designer 프레임워크 비교

WPF Designer 아키텍처는 IComponent 인터페이스 및 System.ComponentModel 네임스페이스로 규정되는 Windows Forms 디자이너 아키텍처와 크게 다릅니다. Windows Forms 컨트롤에 대한 사용자 지정 디자인 타임 구현을 만든 경험이 있다면 WPF Designer 아키텍처를 사용하고 확장하기가 더 쉽다는 점을 확인할 수 있습니다.

Windows Forms 디자이너 개체 모델의 TypeConverterTypeDescriptor 클래스는 WPF Designer 아키텍처에서 그대로 유지됩니다. WPF Designer 아키텍처의 다른 부분은 대부분 달라졌습니다. Windows Forms 디자인 타임 아키텍처에 대한 자세한 내용은 디자인 타임 지원 확장을 참조하십시오.

ComponentModel 프레임워크와 WPF 프레임워크의 주요 차이점

다음 표에서는 WPF Designer 아키텍처와 System.ComponentModel 프레임워크 간의 차이점을 보여 줍니다.

ComponentModel 프레임워크

WPF Designer 프레임워크

IComponent, IContainerISite 인터페이스에 기반을 둡니다.

FrameworkElement 클래스에 기반을 둡니다.

호스트가 제공하는 디자인 타임 서비스에 의존합니다.

디자이너에서 최소 요구 사항을 선언적으로 게시합니다.

컨트롤 형식마다 전용 디자이너 형식이 있습니다.

컨트롤 형식에서 작동할 수 있는 기능의 수에 제한이 없습니다.

컨트롤 형식마다 컨트롤의 컴파일 타임에 고정된 메타데이터가 하드 코드됩니다.

메타데이터가 별도의 어셈블리에 배포되며 도구를 통해 사용자 지정하거나 바꿀 수 있습니다. 이를 통해 컨트롤과 독립적으로 디자인 타임 메타데이터를 업데이트할 수 있습니다.

IDesignerHost가 디자이너 상태를 보유합니다.

EditingContext 클래스가 디자이너 상태를 보유합니다.

IServiceContainer 구현을 통해 서비스가 수집되고 공유됩니다.

EditingContext 클래스가 서비스 참조를 보유합니다.

BehaviorService에서 키보드, 마우스 및 명령 상호 작용을 관리합니다.

WPF Designer 도구 아키텍처에서 키보드, 마우스 및 명령 상호 작용을 관리합니다.

편집 개체 모델은 런타임 컨트롤로 구성되며 PropertyDescriptor 클래스를 통해 런타임에 바인딩된 액세스가 적용됩니다.

편집 개체 모델에서 런타임 컨트롤을 추상화하는 간접 참조 계층을 제공합니다. 범주 편집기를 통해 단일 UI에서 여러 속성을 편집할 수 있습니다.

IComponent와FrameworkElement 비교

WPF 요소는 WPF 핵심 서비스와 프레임워크 수준 요소 클래스를 연결하는 FrameworkElement 클래스에서 파생됩니다.

WPF 요소는 IComponent 인터페이스를 구현하지 않습니다. 이는 WPF Designer에서 System.ComponentModel 프레임워크를 사용하지 않는 근본적인 이유 중 하나입니다. 즉, WPF 컨트롤은 사이팅되지 않습니다. 따라서 WPF 컨트롤은 System.ComponentModel 디자인 환경에서 디자이너 서비스를 요청할 수 없습니다.

디자인 타임 서비스

System.ComponentModel 프레임워크의 디자이너는 디자인 환경에서 서비스를 요청합니다. WPF Designer 프레임워크에서는 환경에 서비스를 쿼리하지 않고 대부분의 작업을 수행할 수 있습니다.

System.ComponentModel 프레임워크에서는 디자이너 서비스가 디자이너 호스트에 없을 수도 있으므로 사용자 지정 디자이너 코드에서 GetService 메서드를 호출한 후 항상 null 참조를 확인해야 합니다. 서비스가 없는 경우에는 디자이너 코드에서 자연스럽게 기능을 제한해야 하지만, 이렇게 할 수 없는 경우가 많습니다.

WPF Designer 프레임워크에서는 사용자 지정 디자이너가 최소 요구 사항을 선언적으로 게시합니다. 호스트에서 계약을 지킬 수 없으면 디자이너가 로드되지 않습니다. 따라서 전체적인 구현이 간편하고 강력해집니다.

전용 디자이너 형식 및 메타데이터 분리

System.ComponentModel 프레임워크에서는 디자이너 형식이 DesignerAttribute 메타데이터 특성을 통해 해당 구성 요소에 연결됩니다. 따라서 컴파일 타임에 관계가 설정되며 구성 요소의 런타임 동작과 디자인 타임 동작 사이에 하드 코드된 종속성이 적용됩니다. 다른 디자이너를 연결하려면 DesignerAttribute 선언을 변경하고 구성 요소의 코드베이스를 다시 컴파일해야 합니다.

WPF Designer에서는 디자이너 메타데이터가 별도의 어셈블리에 모여 있으므로 런타임 구현과 실제로 분리됩니다. 따라서 다양한 도구에서 같은 런타임 형식에 완전히 다른 디자인 환경을 자유롭게 제공할 수 있습니다. 자세한 내용은 AttributeTable을 참조하십시오.

편집 개체 모델

System.ComponentModel 프레임워크에서 사용자 지정 디자이너는 PropertyDescriptor 클래스를 통해 런타임에 바인딩하는 방식으로 컨트롤에 액세스합니다. 디자인 환경에서 이 규칙을 적용하지는 않으므로 개발자가 실수로 PropertyDescriptor 클래스를 통해 컨트롤에 액세스하지 않으면 버그가 발생합니다.

WPF Designer 프레임워크에서는 사용자 지정 디자이너가 편집 개체 모델을 통해 런타임 컨트롤과 상호 작용합니다. 이 모델은 컨트롤을 모델과 뷰로 추상화하는 간접 참조 계층을 제공합니다. 이 개체 모델을 사용하면 PropertyDescriptor 클래스를 통해 컨트롤에 액세스할 필요가 없습니다.

ComponentModel 디자이너 프레임워크와 비슷한 점

WPF Designer의 기초는 편집 컨텍스트입니다. EditingContext 클래스에는 디자이너의 컨텍스트 상태가 들어 있습니다.

편집 컨텍스트의 개념은 System.ComponentModel.Design 네임스페이스의 IDesignerHost 인터페이스와 유사합니다. IDesignerHost 인터페이스는 다양한 기능을 정의하지만 EditingContext 클래스는 데이터 및 동작 기능에만 집중합니다.

편집 컨텍스트는 IServiceContainer 인터페이스와 비슷한 방식으로 서비스를 노출합니다. 편집 컨텍스트를 열거할 수는 있지만 추가된 서비스를 제거할 수는 없습니다. 자세한 내용은 컨텍스트 아키텍처 편집을 참조하십시오.

특성 사용의 차이점

WPF Designer 아키텍처와 Windows Forms 아키텍처에서는 디자이너 특성의 의미가 서로 다릅니다. 다음 표에서는 두 프레임워크 사이에서 디자이너 관련 특성이 다르게 사용되는 방식을 보여 줍니다.

특성

Windows Forms 속성 창

WPF Designer 속성 창 및 Expression Blend 속성 검사자

AmbientValueAttribute

속성이 다른 소스에서 값을 가져오도록 속성에 전달할 값을 지정합니다. 이 값을 앰비언트 값이라고 합니다.

N/A

BrowsableAttribute

속성 또는 이벤트를 속성 창에 표시할지 여부를 지정합니다.

속성 또는 이벤트를 속성 창에 표시해야 할지 여부를 지정합니다. 일반적으로 표시되지 않는 속성에서 명시적으로 true로 지정하면 해당 속성이 표시됩니다.

CategoryAttribute

항목별 모드로 설정된 PropertyGrid 컨트롤에 표시될 때 속성이나 이벤트를 그룹화할 범주 이름을 지정합니다.

속성 창에 표시되는 속성을 그룹화할 범주 이름을 지정합니다.

DefaultValueAttribute

속성의 기본값을 지정합니다.

CLR 데이터 형식의 경우 속성의 기본값을 지정합니다. 종속성 속성에서는 무시됩니다.

DescriptionAttribute

속성 또는 이벤트에 대한 설명을 지정합니다.

N/A

DisplayNameAttribute

인수가 없는 속성, 이벤트 또는 public void 메서드에 대한 표시 이름을 지정합니다.

이 특성이 적용되는 속성에 대해 속성 창에 표시될 이름을 지정합니다.

EditorAttribute

속성을 변경하는 데 사용할 편집기를 지정합니다.

속성을 변경하는 데 사용할 다중 속성 범주 편집기 등의 편집기를 지정합니다.

EditorBrowsableAttribute

N/A

EditorBrowsableState.Advanced를 사용하면 범주 편집기 또는 속성이 고급 Expander에 배치됩니다.

HelpKeywordAttribute

클래스나 멤버의 컨텍스트 키워드를 지정합니다.

N/A

LocalizableAttribute

속성을 지역화할 수 있는지 여부를 지정합니다.

N/A

PasswordPropertyTextAttribute

개체의 텍스트 표시가 별표와 같은 문자로 가려짐을 나타냅니다.

N/A

ReadOnlyAttribute

이 특성이 바인딩되는 속성이 디자인 타임에 읽기 전용인지 읽기/쓰기인지 여부를 지정합니다.

이 특성이 바인딩되는 속성이 디자인 타임에 읽기 전용인지 읽기/쓰기인지 여부를 지정합니다. ReadOnlyAttribute로 표시된 속성은 속성 검사자의 문자열 편집기에 읽기 전용 개체를 표시합니다.

RefreshPropertiesAttribute

연결된 속성 값이 변경될 때 속성 창을 새로 고쳐야 함을 나타냅니다.

N/A

TypeConverterAttribute

이 특성이 바인딩되는 개체에 대한 변환기로 사용할 형식을 지정합니다.

이 특성이 바인딩되는 개체에 대한 변환기로 사용할 형식을 지정합니다.

DefaultEventAttribute

구성 요소의 기본 이벤트를 지정합니다.

두 번 클릭할 때 만들 이벤트 처리기를 결정하는 구성 요소의 기본 이벤트를 지정합니다.

DefaultPropertyAttribute

구성 요소의 기본 속성을 지정합니다.

기본적으로 선택되는 속성을 결정하는 구성 요소의 기본 속성을 지정합니다.

DesignerAttribute

구성 요소에 대한 디자인 타임 서비스를 구현하는 데 사용되는 클래스를 지정합니다.

N/A

DesignerCategoryAttribute

클래스의 디자이너가 특정 범주에 속하도록 지정합니다.

N/A

ToolboxItemAttribute

도구 상자 항목의 특성을 나타냅니다.

N/A

ToolboxItemFilterAttribute

도구 상자에 사용할 필터 문자열과 필터 형식을 지정합니다.

N/A

ToolboxBrowsableAttribute

N/A

어셈블리에서 도구 상자에 추가할 형식을 검사할 때 도구 상자에 형식이 표시되지 않도록 하는 데 사용됩니다.

NewItemTypesAttribute

N/A

컬렉션 편집기 또는 하위 속성 편집기의 콤보 상자에 추가되는 항목을 지정하는 데 사용됩니다. 생성을 사용자 지정하는 팩터리를 지정할 수 있습니다.

PropertyOrderAttribute

N/A

속성 창에서 속성이 표시되는 순서를 지정하는 데 사용됩니다.

다음 특성은 WPF Designer 프레임워크에 사용되지만 Windows Forms 디자이너 프레임워크에는 사용되지 않습니다.

도구 상자 아이콘 지정의 차이점

Windows Forms 디자이너 프레임워크에서는 컨트롤 클래스에 ToolboxBitmapAttribute를 적용하여 사용자 지정 컨트롤에 대한 도구 상자 아이콘을 지정합니다.

WPF Designer 프레임워크에서는 포함 리소스와 명명 규칙을 사용하여 도구 상자 비트맵을 지정합니다. 또한 ToolboxBrowsableAttribute를 사용하여 어셈블리에서 도구 상자를 채우는 데 사용할 수 있는 형식을 제한합니다.

메타데이터 지정의 차이점

Windows Forms에서는 DesignerAttribute 등의 특성을 적용하여 디자이너 메타데이터가 선언적으로 지정됩니다.

WPF Designer 아키텍처에서는 디자이너 메타데이터가 AttributeTable에 지정됩니다.

참고 항목

기타 리소스

WPF Designer 확장성

디자인 타임 지원 확장

WPF Designer 확장성