다음을 통해 공유


프레임워크 속성 메타데이터

프레임워크 속성 메타데이터 옵션은 WPF(Windows Presentation Foundation) 아키텍처의 WPF 프레임워크 수준에 있는 것으로 간주되는 개체 요소의 속성용으로 보고됩니다. 일반적으로 WPF 프레임워크 수준 지정에서는 렌더링, 데이터 바인딩 및 속성 시스템 미세 조정과 같은 기능이 WPF 프레젠테이션 API 및 실행 파일을 통해 처리됩니다. 이러한 시스템에서 프레임워크 속성 메타데이터를 쿼리하여 특정 요소 속성의 기능별 특성을 결정합니다.

필수 구성 요소

이 항목에서는 Windows Presentation Foundation(WPF) 클래스의 기존 종속성 속성의 소비자 관점에서 종속성 속성을 이해하고 종속성 속성 개요를 읽었다고 가정합니다. 종속성 속성 메타데이터도 읽어야 합니다.

프레임워크 속성 메타데이터로 통신하는 내용

프레임워크 속성 메타데이터는 다음 범주로 구분할 수 있습니다.

  • 요소에 영향을 주는 보고 레이아웃 속성(AffectsArrange, AffectsMeasure, AffectsRender). 속성이 각 요소에 영향을 미치면 메타데이터에서 이러한 플래그를 설정할 수 있으며, 클래스에서 MeasureOverride / ArrangeOverride 메서드를 구현하여 특정 렌더링 동작과 정보를 레이아웃 시스템에 제공할 수도 있습니다. 일반적으로 이러한 구현에서는 해당 레이아웃 속성이 속성 메타데이터에서 참인 종속성 속성의 속성 무효화를 확인하고 해당 무효화만 새로운 레이아웃 전달을 요청해야 합니다.

  • 요소의 부모 요소에 영향을 주는 보고 레이아웃 속성(AffectsParentArrange, AffectsParentMeasure). 이러한 플래그가 기본적으로 설정되는 몇 가지 예는 FixedPage.LeftParagraph.KeepWithNext입니다.

  • Inherits. 기본적으로 종속성 속성은 값을 상속하지 않습니다. OverridesInheritanceBehavior를 사용하면 상속 경로를 시각적 트리로 이동할 수 있습니다. 이 동작은 컨트롤 합성 시나리오에 필요합니다.

    참고

    속성 값 컨텍스트에서 “상속”이라는 용어는 종속성 속성에 특정한 것입니다. 즉,WPF 속성 시스템의 WPF 프레임워크 수준 기능 때문에 자식 요소가 부모 요소에서 실제 종속성 속성 값을 상속할 수 있습니다. 파생된 유형을 통한 멤버 상속 및 관리된 코드 유형과는 직접적인 관련이 없습니다. 자세한 내용은 속성 값 상속을 참조하십시오.

  • 보고 데이터 바인딩 특성(IsNotDataBindable, BindsTwoWayByDefault). 기본적으로 프레임워크의 종속성 속성은 단방향 바인딩 동작을 통한 데이터 바인딩을 지원합니다. 시나리오가 전혀 없는 경우 데이터 바인딩을 사용하지 않도록 설정할 수 있습니다(유연하고 확장 가능해야 하므로 기본 WPF API에는 이러한 속성의 예가 많지 않음). 구성 요소 간에 컨트롤의 동작을 하나로 연결하는 속성(예: IsSubmenuOpen)의 경우 또는 양방향 바인딩이 사용자(예: Text)를 위한 일반적인 예상 시나리오인 경우 바인딩의 기본값을 양방향으로 설정할 수 있습니다. 데이터 바인딩 관련 메타데이터를 변경하면 기본값에만 영향을 미칩니다. 바인딩별 변경에서는 해당 기본값을 항상 변경할 수 있습니다. 바인딩 모드와 일반적인 바인딩에 대한 자세한 내용은 데이터 바인딩 개요를 참조하세요.

  • 저널링을 지원하는 애플리케이션 또는 서비스에서 속성을 저널링하는지 보고(Journal). 일반 요소에는 기본적으로 저널링을 사용하지 않지만, 특정 사용자 입력 컨트롤에 대해서는 선택적으로 사용합니다. 이 속성은 저널링의 WPF 구현을 포함하여 저널링 서비스를 통해 읽어야 하며, 일반적으로 탐색 단계 간에 지속되어야 하는 목록의 사용자 선택 항목과 같은 사용자 컨트롤에 설정됩니다. 저널에 대한 자세한 내용은 탐색 개요를 참조하세요.

FrameworkPropertyMetadata 읽기

위에서 연결된 각 속성은 FrameworkPropertyMetadata가 즉시 기본 클래스 UIPropertyMetadata에 추가하는 특정 속성입니다. 이러한 각 속성은 기본적으로 false입니다. 이러한 속성 값을 아는 것이 중요한 속성의 메타데이터 요청에서는 반환된 메타데이터를 FrameworkPropertyMetadata로 캐스팅한 다음 필요에 따라 개별 속성의 값을 확인해야 합니다.

메타데이터 지정

새로운 종속성 속성 등록에 메타데이터를 적용하기 위해 새 메타데이터 인스턴스를 만들 때 기본 PropertyMetadata 또는 FrameworkPropertyMetadata와 같은 파생 클래스 중에서 사용할 메타데이터 클래스를 선택할 수 있습니다. 일반적으로 속성이 속성 시스템 및 WPF 기능(예: 레이아웃 및 데이터 바인딩)과 상호 작용하는 경우 특히 FrameworkPropertyMetadata를 사용해야 합니다. 더욱 정교한 시나리오를 위한 또 다른 옵션은 멤버에 추가 정보가 수반되는 고유 메타데이터 보고 클래스를 만들기 위해 FrameworkPropertyMetadata에서 파생하는 것입니다. 또는 PropertyMetadataUIPropertyMetadata를 사용하여 구현의 기능에 대한 지원 정도를 알릴 수 있습니다.

기존 속성(AddOwner 또는 OverrideMetadata 호출)의 경우 항상 원래 등록이 사용하는 메타데이터 형식으로 재정의해야 합니다.

FrameworkPropertyMetadata 인스턴스를 만드는 경우, 다음 두 가지 방법을 사용하여 프레임워크 속성 특성을 알리는 특정 속성의 값으로 해당 메타데이터를 채웁니다.

  1. flags 매개 변수를 허용하는 FrameworkPropertyMetadata 생성자 시그니처를 사용합니다. 이 매개 변수는 FrameworkPropertyMetadataOptions 열거형 플래그의 모든 원하는 조합 값으로 채워야 합니다.

  2. flags 매개 변수 없이 시그니처 중 하나를 사용한 다음 원하는 특성 변경마다 FrameworkPropertyMetadata의 각 보고 부울 속성을 true로 설정합니다. 이 작업을 수행하는 경우 이 종속성 속성이 있는 요소를 생성하기 전에 이러한 속성을 설정해야 합니다. flags 매개 변수를 방지하는 동작을 허용하기 위해 부울 속성은 읽기-쓰기가 되며 여전히 메타데이터를 채우지만, 속성을 사용하기 전에 메타데이터를 적절하게 봉인해야 합니다. 따라서 메타데이터를 요청한 후에 속성을 설정하려는 것은 올바른 작업이 아닙니다.

프레임워크 속성 메타데이터 병합 동작

프레임워크 속성 메타데이터를 재정의할 때, 여러 다른 메타데이터 특성을 병합하거나 대체합니다.

이 동작은 Merge에 의해 구현되며 파생된 메타데이터 클래스에서 재정의할 수 있습니다.

참고 항목