Jak implementować właściwość zależności

W tym przykładzie pokazano, jak utworzyć kopię zapasową właściwości środowiska uruchomieniowego języka wspólnego (CLR) z polem DependencyProperty , definiując w ten sposób właściwość zależności. Jeśli zdefiniujesz własne właściwości i chcesz, aby obsługiwały wiele aspektów funkcji programu Windows Presentation Foundation (WPF), w tym stylów, powiązania danych, dziedziczenia, animacji i wartości domyślnych, należy zaimplementować je jako właściwość zależności.

Przykład

Poniższy przykład najpierw rejestruje właściwość zależności, wywołując metodę Register . Nazwa pola identyfikatora używanego do przechowywania nazwy i właściwości zależności musi być Name wybrana dla właściwości zależności w ramach Register wywołania, dołączana przez ciąg Propertyliterału . Jeśli na przykład zarejestrujesz właściwość zależności za pomocą NameLocationklasy , to pole identyfikatora zdefiniowane dla właściwości zależności musi mieć nazwę LocationProperty.

W tym przykładzie nazwa właściwości zależności i jej metody dostępu CLR to State; pole identyfikatora to StateProperty; typ właściwości to Boolean; a typ rejestrujący właściwość zależności to MyStateControl.

Jeśli nie będziesz przestrzegać tego wzorca nazewnictwa, projektanci mogą nie zgłaszać właściwości poprawnie, a niektóre aspekty aplikacji stylu systemu właściwości mogą nie zachowywać się zgodnie z oczekiwaniami.

Można również określić domyślne metadane dla właściwości zależności. W tym przykładzie jest rejestrowana wartość State domyślna właściwości dependency o wartości false.

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

Aby uzyskać więcej informacji na temat sposobu i dlaczego zaimplementować właściwość zależności, w przeciwieństwie do tworzenia kopii zapasowej właściwości CLR z polem prywatnym, zobacz Właściwości zależności — omówienie.

Zobacz też