Aracılığıyla paylaş


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

Bu örnekte, bir sınıfın farklı bir tür için kaydedilmiş bir bağımlılık özelliğinin sahibi olarak nasıl ekleneceği gösterilmektedir. Bunu yaparak WPF XAML okuyucusu ve özellik sistemi hem sınıfını özelliğin ek sahibi olarak tanıyabilir. Sahip olarak ekleme isteğe bağlı olarak, ekleme sınıfının türe özgü meta veriler sağlamasına olanak tanır.

Aşağıdaki örnekte, StateProperty sınıfı tarafından MyStateControl kaydedilen bir özelliktir. sınıfıUnrelatedStateControl, özellikle ekleme türünde mevcut olduğu gibi bağımlılık özelliği için yeni meta veriler sağlayan imzayı kullanarak yöntemini kullanarak AddOwner kendisini öğesinin sahibi StateProperty olarak ekler. Özellik için Bağımlılık Özelliği Uygulama örneğinde gösterilen örneğe benzer ortak dil çalışma zamanı (CLR) erişimcileri sağlamanız ve sahip olarak eklenen sınıfta bağımlılık özelliği tanımlayıcısını yeniden kullanıma sunmanız gerektiğine dikkat edin.

Sarmalayıcılar olmadan bağımlılık özelliği veya SetValuekullanarak GetValue programlı erişim açısından çalışmaya devam eder. Ancak genellikle bu özellik sistemi davranışını CLR özellik sarmalayıcılarıyla paralel hale getirmek istersiniz. Sarmalayıcılar bağımlılık özelliğini program aracılığıyla ayarlamayı kolaylaştırır ve özelliklerin XAML öznitelikleri olarak ayarlanmasını mümkün hale getirir.

Varsayılan meta verileri geçersiz kılmayı öğrenmek için bkz . 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.