Share via


방법: 종속성 속성의 메타데이터 재정의

업데이트: 2007년 11월

이 예제에서는 OverrideMetadata 메서드를 호출하고 형식별 메타데이터를 제공하여 상속된 클래스가 제공하는 기본 종속성 속성 메타데이터를 재정의하는 방법을 보여 줍니다.

예제

클래스는 해당 PropertyMetadata를 정의하여 기본값 및 속성 시스템 콜백과 같은 종속성 속성의 동작을 정의할 수 있습니다. 대부분의 종속성 속성 클래스의 경우 클래스를 등록하는 동안 기본 메타데이터가 설정됩니다. 여기에는 WPF API의 일부인 종속성 속성이 포함됩니다. 클래스 상속을 통해 종속성 속성을 상속하는 클래스는 메타데이터를 통해 변경할 수 있는 속성의 특성이 모든 서브클래스별 요구 사항과 일치하도록 원래 메타데이터를 재정의할 수 있습니다.

종속성 속성에 대한 메타데이터 재정의는 속성 시스템에서 사용하도록 해당 속성을 배치하기 전에 수행해야 합니다. 이는 속성을 등록하는 특정 개체 인스턴스가 인스턴스화되는 시점과 일치합니다. OverrideMetadata 호출은 자신을 OverrideMetadata의 forType의 매개 변수로 제공하는 형식의 정적 생성자 내에서 수행해야 합니다. 소유자 형식의 인스턴스가 생성된 후 메타데이터를 변경해도 예외가 발생하지는 않지만 속성 시스템의 동작이 일정하지 않게 됩니다. 뿐만 아니라 메타데이터는 형식 하나당 한 번만 재정의할 수 있습니다. 같은 형식에서 메타데이터를 그 이상 재정의하면 예외가 발생합니다.

다음 예제에서는 사용자 지정 클래스 MyAdvancedStateControl이 MyAdvancedStateControl이 제공한 StateProperty의 메타데이터를 새 속성 메타데이터로 재정의합니다. 예를 들어, 새로 생성된 MyAdvancedStateControl 인스턴스에서 속성을 쿼리하면 StateProperty의 기본값이 이제 true입니다.

public class MyStateControl : ButtonBase
{
  public MyStateControl() : base() { }
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); } 
  }
  public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
    "State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}


...


public class MyAdvancedStateControl : MyStateControl
{
  public MyAdvancedStateControl() : base() { }
  static MyAdvancedStateControl()
  {
    MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata(true));
  }
}

참고 항목

개념

종속성 속성 개요

사용자 지정 종속성 속성

참조

DependencyProperty

기타 리소스

속성 방법 항목

속성 샘플