다음을 통해 공유


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

업데이트: 2007년 11월

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

이 항목에는 다음 단원이 포함되어 있습니다.

  • 사전 요구 사항
  • 프레임워크 속성 메타데이터가 전달하는 내용
  • FrameworkPropertyMetadata 읽기
  • 메타데이터 지정
  • 프레임워크 속성 메타데이터 병합 동작
  • 관련 항목

사전 요구 사항

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

프레임워크 속성 메타데이터가 전달하는 내용

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

  • 요소에 영향을 주는 레이아웃 속성 보고(AffectsArrange, AffectsMeasure, AffectsRender). 속성이 해당 측면에 영향을 주고 레이아웃 시스템에 특정 렌더링 동작과 정보를 제공하기 위해 클래스에 MeasureOverride/ArrangeOverride 메서드를 구현하는 경우 메타데이터에 이러한 플래그를 설정할 수 있습니다. 일반적으로 이러한 구현은 이러한 레이아웃 속성이 속성 메타데이터에서 true인 종속성 속성에서 속성 무효화를 검사하며 이러한 무효화에만 새 레이아웃 과정 요청이 필요합니다.

  • 요소의 부모 요소에 영향을 주는 레이아웃 속성 보고(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 매개 변수를 피하는 동작을 허용하면서 메타데이터를 채우도록 하기 위해 읽기-쓰기로 설정되어 있지만 메타데이터는 속성 사용 전에 봉인되어야 합니다. 따라서 메타데이터 요청 후 속성을 설정하려는 시도는 올바르지 않은 작업입니다.

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

프레임워크 속성 메타데이터를 재정의할 때 여러 메타데이터 특성이 병합되거나 바뀝니다.

  • PropertyChangedCallback은 병합됩니다. 새 PropertyChangedCallback을 추가하면 해당 콜백이 메타데이터에 저장됩니다. 재정의에 PropertyChangedCallback을 지정하지 않으면 PropertyChangedCallback의 값이 메타데이터에서 해당 값을 지정한 가장 가까운 상위에서의 참조로 승격됩니다.

  • PropertyChangedCallback에 대한 실제 속성 시스템 동작은 계층 구조의 모든 메타데이터 소유자에 대한 구현이 가장 깊게 파생된 클래스의 콜백이 먼저 호출되는 속성 시스템 실행 순서대로 테이블에 유지되고 추가되는 것입니다. 상속된 콜백은 해당 콜백을 메타데이터에 배치한 클래스가 소유한 것으로 간주되어 한 번만 실행됩니다.

  • DefaultValue를 바꿉니다. 재정의에 PropertyChangedCallback을 지정하지 않으면 DefaultValue의 값은 메타데이터에서 해당 값을 지정한 가장 가까운 상위에서 가져옵니다.

  • CoerceValueCallback 구현을 바꿉니다. 새 CoerceValueCallback을 추가하면 해당 콜백이 메타데이터에 저장됩니다. 재정의에 CoerceValueCallback을 지정하지 않으면 CoerceValueCallback의 값이 메타데이터에서 해당 값을 지정한 가장 가까운 상위에서의 참조로 승격됩니다.

  • 속성 시스템 동작은 직접적인 메타데이터의 CoerceValueCallback만 호출되는 방식으로 수행됩니다. 계층 구조의 다른 CoerceValueCallback 구현에 대한 참조는 유지되지 않습니다.

  • FrameworkPropertyMetadataOptions의 플래그는 상속된 메타데이터의 FrameworkPropertyMetadata에 대해 다양한 해당 부울 속성 값 및 비트 or 연산으로 조합됩니다. IsAnimationProhibited는 새 값으로 바뀌거나 상속된 메타데이터의 값을 사용합니다.

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

참고 항목

개념

종속성 속성 메타데이터

종속성 속성 개요

사용자 지정 종속성 속성

참조

GetMetadata