다음을 통해 공유


속성 편집 아키텍처

개체 속성의 시각적 편집은 WPF Designer for Visual Studio의 중요한 기능입니다. 이 항목에서는 WPF Designer 속성 편집 시스템의 아키텍처에 대해 설명합니다.

속성 엔트리

PropertyEntry 클래스는 속성 자체를 나타냅니다. PropertyValue 클래스는 속성의 내부 값을 나타냅니다.

범주 편집기

범주 편집기를 사용하면 최종 사용자가 한 범주 내의 여러 속성을 동시에 편집할 수 있습니다. 범주 편집기와 연결된 속성은 속성 창 외에서는 표시되지 않습니다. 범주 편집기로 편집하지 않는 속성은 표시되며 편집할 수 있습니다. 범주 편집기로 편집할 범주의 속성을 지정할 수 있습니다.

속성 값 편집기

속성 값 편집기는 시각적 디자이너의 속성 창에서 특정 형식이 표시되고 편집되는 방법을 정의합니다. WPF Designer에서 속성 값 편집기가 수행하는 역할은 System.ComponentModel 아키텍처에서 UITypeEditor 클래스가 하는 역할과 비슷합니다. 그러나 WPF Designer 편집기는 System.ComponentModel 및 Windows Forms 아키텍처에 독립적입니다.

PropertyValueEditor는 다음 표에 나오는 파트로 구성됩니다.

속성 값 편집기 파트

설명

인라인 편집기(또는 뷰)

호스팅 속성 창의 뷰와 같은 물리적 공간에서 호스팅되는 편집기입니다. Margin 속성 편집기를 예로 들 수 있습니다.

확장 편집기

일반적으로 내부에서 호스팅되지 않는 편집기입니다. System.ComponentModel 아키텍처의 드롭다운 스타일 편집기에 해당합니다. HorizontalAlignment 속성 편집기를 예로 들 수 있습니다.

대화 상자

자체의 대화 상자에 구현되는 편집기입니다. RowDefinitions 속성 편집기를 예로 들 수 있습니다.

뷰 및 인라인 편집기 파트에는 기본값을 사용할 수 있습니다. 확장 편집기 파트를 제공하는 데는 PropertyValueEditor가 필요하지 않습니다.

각 파트는 WPF DataTemplate이며 각각 독립적으로 사용할 수 있습니다.

호스팅 속성 창은 뷰 및 편집기 주위의 프레임을 제공합니다. 따라서 호스트가 편집기 간에 일관된 스타일을 제공하거나 호스트마다 다른 스타일을 제공할 수 있습니다. 예를 들어, Expression Blend와 Visual Studio는 각각의 속성 창에 서로 다른 모양과 동작을 제공합니다.

WPF 데이터 바인딩 및 표준 WPF RoutedCommand 개체 집합은 호스트와 PropertyValueEditor 파트 간의 통신 메커니즘을 제공합니다.

간단한 예를 들면, 값 편집기 파트가 표준 WPF 컨트롤이 포함된 DataTemplate일 수 있습니다. 좀 더 복잡한 예를 들면, 형식 파트가 사용자 지정 컨트롤을 참조하는 DataTemplate일 수 있습니다.

구현할 수 있는 속성 값 편집기의 종류는 세 가지이며 다음 표에서는 이러한 속성 값 편집기에 대해 설명합니다.

속성 값 편집기 종류

설명

단순

속성 값 편집기가 인라인 편집기로 구성됩니다.

확장

속성 값 편집기가 인라인 편집기와 확장 편집기로 구성됩니다.

대화 상자

속성 값 편집기가 인라인 편집기와 대화 상자로 구성됩니다.

인프라 클래스

인프라 클래스는 모든 속성 값 편집기를 구현하는 데 필요합니다. 다음 표에서는 값 편집기를 호스팅하거나 제작하는 데 필요한 핵심 인프라를 구성하는 인프라 클래스를 보여 줍니다.

인프라 클래스

설명

PropertyValue

속성의 값을 나타냅니다.

PropertyValueEditor

값 편집기에 대한 기본 클래스입니다.

PropertyValueEditorCommands

RoutedCommand 형식 및 해당 명령에 대한 기본 처리기 구현입니다.

DialogPropertyValueEditor

대화 상자 값 편집기에 대한 추상 기본 클래스입니다.

  • ShowDialog 명령 및 해당 명령에 대한 기본 처리기를 정의합니다.

  • 기본 뷰와 인라인 편집기 템플릿을 포함합니다.

  • PropertyValueEditor를 대화 상자 편집기로 표시합니다.

속성 값 편집기 구현

다음 단원에서는 속성 값 편집기 구현의 여러 측면에 대해 설명합니다.

Value, StringValue 및 Collection

PropertyValue 모델에는 속성 값과 관련된 세 가지 속성이 있습니다. 다음 표에서는 PropertyValue 속성에 대해 설명합니다.

PropertyValue 속성

설명

Value

데이터의 개체 표현입니다.

StringValue

데이터의 문자열 표현이며 데이터의 표시나 serialization에 사용할 수 있습니다.

Collection

데이터의 컬렉션 표현입니다.

StringValue는 데이터의 문자열 표현이며 데이터의 표시나 serialization에 사용할 수 있습니다. ValueStringValue는 설정된 모든 호출을 캐시합니다.

StringValue에 대한 캐시는 Value가 설정될 때 플러시됩니다. 일반적인 시나리오에서는 사용자 형식으로 디자인하는 속성에 대해 동적 업데이트를 지원하며 이 경우 StringValue는 텍스트 입력에 바인딩된 데이터입니다. 그러나 기본 속성은 동적 텍스트가 특정 조건을 만족할 때만 설정됩니다.

PropertyValueEditor 요구 사항

올바르게 구현된 속성 값 편집기는 다음 요구 사항을 만족해야 합니다.

  • 인라인 편집기와 확장 편집기 파트를 독립적으로 사용할 수 있도록 속성 값 편집기를 디자인해야 합니다.

  • 속성 값 편집기가 상태를 저장하지 않아야 합니다. 속성 값 편집기는 상태 비저장 편집기입니다. 속성 값 편집기는 호스트 구현에서 캐시할 수 있으며 여러 속성 값에서 다시 사용될 수 있습니다.

  • 속성 값 편집기는 값 편집기 파트(뷰/인라인/확장)가 한 번에 하나만 활성 상태에 있지 않습니다. 예를 들어, 대화 상자의 뷰 파트, 인라인 파트, 확장 UI 파트가 동시에 활성 상태일 수 있습니다.

  • 속성 값 편집기의 파트로 구현된 컨트롤은 상태를 저장하지 않아야 합니다. 값 편집기의 파트로 구현된 컨트롤은 컨트롤이 하나의 속성 값에만 바인딩되지는 않습니다. 즉, 다른 속성 값을 변경하기 위해 컨트롤이 재활용될 수 있습니다. 캐시된 정보는 데이터 모델이 업데이트되면 플러시되어야 합니다.

  • 속성 값 편집기의 파트로 구현된 컨트롤은 호스트 또는 해당 부모 컨트롤에 대해 어떠한 가정도 하지 않아야 합니다. PropertyValue 데이터 모델, DataContext 경유, 그리고 표준 명령 집합만 통신 메커니즘으로 사용해야 합니다.

참고 항목

참조

PropertyEntry

PropertyValue

PropertyValueEditor

기타 리소스

WPF Designer 확장성

사용자 지정 편집기 만들기

WPF and Silverlight Designer Extensibility Samples