방법: 종속성 속성의 소유자 형식 추가

이 예제에서는 다른 형식에 대해 등록된 종속성 속성의 소유자로 클래스를 추가하는 방법을 보여 줍니다. 이렇게 하면 WPF XAML 판독기 및 속성 시스템은 모두 해당 클래스를 속성의 추가 소유자로 인식할 수 있습니다. 필요에 따라 소유자로 추가하면 클래스를 추가하여 형식별 메타데이터를 제공할 수 있습니다.

다음 예제에서 StatePropertyMyStateControl 클래스가 등록한 속성입니다. 클래스 UnrelatedStateControlAddOwner 메서드를 사용하여, 특히 종속성 속성에 대한 새 메타데이터를 추가 형식에 있는 대로 허용하는 서명을 사용하여 StateProperty의 소유자로 자신을 추가합니다. 종속성 속성 구현 예제와 유사한 속성에 대한 CLR(공용 언어 런타임) 접근자를 제공하고 소유자로 추가되는 클래스에 종속성 속성 식별자를 다시 노출해야 합니다.

래퍼가 없으면 종속성 속성은 GetValue 또는 SetValue를 사용하여 프로그래매틱 액세스의 관점에서 작동합니다. 그러나 일반적으로 CLR 속성 래퍼를 사용하여 이 속성 시스템 동작을 병렬 처리하려고 합니다. 래퍼를 사용하면 종속성 속성을 프로그래밍 방식으로 더 쉽게 설정하고 속성을 XAML 특성으로 설정할 수 있습니다.

기본 메타데이터를 재정의하는 방법을 알아보려면 종속성 속성의 메타데이터 재정의를 참조하세요.

예제

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 MyStateControl
    Inherits ButtonBase
  Public Sub New()
      MyBase.New()
  End Sub
  Public Property State() As Boolean
    Get
        Return CType(Me.GetValue(StateProperty), Boolean)
    End Get
    Set(ByVal value As Boolean)
        Me.SetValue(StateProperty, value)
    End Set
  End Property
  Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False))
End Class
public class UnrelatedStateControl : Control
{
  public UnrelatedStateControl() { }
  public static readonly DependencyProperty StateProperty = MyStateControl.StateProperty.AddOwner(typeof(UnrelatedStateControl), new PropertyMetadata(true));
  public Boolean State
  {
    get { return (Boolean)this.GetValue(StateProperty); }
    set { this.SetValue(StateProperty, value); }
  }
}
Public Class UnrelatedStateControl
    Inherits Control
  Public Sub New()
  End Sub
  Public Shared ReadOnly StateProperty As DependencyProperty = MyStateControl.StateProperty.AddOwner(GetType(UnrelatedStateControl), New PropertyMetadata(True))
  Public Property State() As Boolean
    Get
        Return CType(Me.GetValue(StateProperty), Boolean)
    End Get
    Set(ByVal value As Boolean)
        Me.SetValue(StateProperty, value)
    End Set
  End Property
End Class

참고 항목