Nasıl yapılır: Bağımlılık Özelliği için Sahip Türü Ekleme

Bu örnek, farklı bir tür için kaydedilen Dependency özelliğinin sahibi olarak bir sınıfın nasıl ekleneceğini gösterir. Bunu yaptığınızda, WPF XAML okuyucu ve özellik sistemi, özelliğin ek sahibi olarak sınıfını tanıyabilecektir. Sahip olarak eklemek, isteğe bağlı olarak türe özgü meta veriler sağlamak için sınıfın eklenmesine izin verir.

Aşağıdaki örnekte, StateProperty sınıfı tarafından kaydedilen bir özelliktir MyStateControl . Sınıfı, UnrelatedStateControl StateProperty AddOwner özellikle, ekleme türü üzerinde olduğu gibi bağımlılık özelliği için yeni meta verilere izin veren imzayı kullanarak kendisini kullanarak kendi sahibi olarak ekler. Özellik için ortak dil çalışma zamanı (CLR) erişimcileri sağlamanız gerektiğine dikkat edin. bunun yanı sıra, sahip olarak eklenmekte olan sınıfta bağımlılık özellik tanımlayıcısını yeniden kullanıma sunar.

Sarmalayıcılar olmadan, bağımlılık özelliği, veya kullanılarak programlı erişim perspektifinden çalışmaya devam eder GetValue SetValue . Ancak, bu özellik sistem davranışının CLR özellik sarmalayıcılarıyla paralel olmasını sağlar. Sarmalayıcılar, bağımlılık özelliğini programlı bir şekilde ayarlamayı kolaylaştırır ve özellikleri öznitelik olarak ayarlamayı mümkün hale getirir XAML .

Varsayılan meta verileri nasıl geçersiz kılabileceğinizi öğrenmek için bkz. bir bağımlılık özelliği Için meta verileri geçersiz kılma.

Örnek

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

Ayrıca bkz.