Jak dodać typ właściciela dla właściwości zależności

W tym przykładzie pokazano, jak dodać klasę jako właściciela właściwości zależności zarejestrowanej dla innego typu. Dzięki temu czytnik I system właściwości WPF są w stanie rozpoznać klasę jako dodatkowego właściciela właściwości. Dodanie jako właściciela opcjonalnie umożliwia dodawanie klasy w celu zapewnienia metadanych specyficznych dla typu.

W poniższym przykładzie StateProperty jest właściwością zarejestrowaną przez klasę MyStateControl . Klasa UnrelatedStateControl dodaje się jako właściciel StateProperty metody przy użyciu metody, w szczególności przy użyciu AddOwner podpisu, który umożliwia nowe metadane dla właściwości zależności, ponieważ istnieje w przypadku typu dodawania. Zwróć uwagę, że należy podać metody dostępu środowiska uruchomieniowego języka wspólnego (CLR) dla właściwości podobnej do przykładu pokazanego w przykładzie Implementowanie właściwości zależności , a także ponownie uwidocznić identyfikator właściwości zależności dla klasy dodawanej jako właściciel.

Bez otoek właściwość zależności nadal będzie działać z perspektywy dostępu programowego przy użyciu metody GetValue lub SetValue. Jednak zazwyczaj chcesz równolegle z tym zachowaniem systemu właściwości za pomocą otoki właściwości CLR. Otoki ułatwiają programowe ustawianie właściwości zależności i umożliwia ustawienie właściwości jako atrybutów XAML.

Aby dowiedzieć się, jak zastąpić domyślne metadane, zobacz Zastępowanie metadanych dla właściwości zależności.

Przykład

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

Zobacz też