Bagikan melalui


Cara: Menambahkan Jenis Pemilik untuk Properti Dependensi

Contoh ini menunjukkan cara menambahkan kelas sebagai pemilik properti dependensi yang terdaftar untuk jenis yang berbeda. Dengan melakukan ini, pembaca WPF XAML dan sistem properti keduanya dapat mengenali kelas sebagai pemilik tambahan properti. Menambahkan sebagai pemilik secara opsional memungkinkan penambahan kelas untuk menyediakan metadata khusus jenis.

Dalam contoh berikut, StateProperty adalah properti yang didaftarkan oleh MyStateControl kelas . Kelas UnrelatedStateControl menambahkan dirinya sebagai pemilik menggunakan StatePropertyAddOwner metode , khususnya menggunakan tanda tangan yang memungkinkan metadata baru untuk properti dependensi seperti yang ada pada jenis penambahan. Perhatikan bahwa Anda harus menyediakan pengakses runtime bahasa umum (CLR) untuk properti yang mirip dengan contoh yang ditunjukkan dalam contoh Terapkan Properti Dependensi, serta mengekspos ulang pengidentifikasi properti dependensi pada kelas yang ditambahkan sebagai pemilik.

Tanpa pembungkus, properti dependensi masih akan berfungsi dari perspektif akses terprogram menggunakan GetValue atau SetValue. Tetapi Anda biasanya ingin menyejajarkan perilaku sistem properti ini dengan pembungkus properti CLR. Pembungkus memudahkan untuk mengatur properti dependensi secara terprogram, dan memungkinkan untuk mengatur properti sebagai atribut XAML.

Untuk mengetahui cara mengambil alih metadata default, lihat Mengambil alih Metadata untuk Properti Dependensi.

Contoh

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

Baca juga