Freigeben über


Gewusst wie: Hinzufügen eines Besitzertyps für eine Abhängigkeitseigenschaft

In diesem Beispiel wird veranschaulicht, wie eine Klasse als Besitzer einer Abhängigkeitseigenschaft, die für einen anderen Typ registriert ist, hinzugefügt wird. Hierdurch kann sowohl der WPF XAML-Reader als auch das Eigenschaftensystem die Klasse als weiteren Besitzer der Eigenschaft erkennen. Das Hinzufügen als Besitzer ermöglicht optional auch das Hinzufügen der Klasse, damit typspezifische Metadaten bereitgestellt werden können.

Im folgenden Beispiel ist StateProperty eine der durch die MyStateControl-Klasse registrierte Eigenschaft. Die UnrelatedStateControl-Klasse fügt sich selbst als ein Besitzer von StateProperty mithilfe der AddOwner-Methode hinzu, wobei speziell die Signatur verwendet wird, die neue Metadaten für die Abhängigkeitseigenschaft, die im hinzufügenden Typ vorhanden sind, zulässt. Beachten Sie, dass Sie common language runtime (CLR)-Accessoren für die Eigenschaft bereitstellen müssen, ähnlich wie im Beispiel Gewusst wie: Implementieren einer Abhängigkeitseigenschaft, sowie die Kennung der Abhängigkeitseigenschaft für die Klasse, die als Besitzer hinzugefügt wird, erneut verfügbar machen müssen.

Ohne Wrapper funktioniert die Abhängigkeitseigenschaft aus der Sicht des programmgesteuerten Zugriffs mit GetValue oder SetValue trotzdem. In der Regel soll das Verhalten dieses Eigenschaftensystems jedoch parallel zu den CLR-Eigenschaftenwrappern sein. Die Wrapper vereinfachen das programmgesteuerte Festlegen der Abhängigkeitseigenschaft und ermöglichen es, diese Eigenschaften als XAML-Attribute festzulegen.

Informationen zum Überschreiben von Standardmetadaten finden Sie unter Gewusst wie: Überschreiben von Metadaten für eine Abhängigkeitseigenschaft.

Beispiel

  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
      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
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 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); }
  }
}

Siehe auch

Konzepte

Benutzerdefinierte Abhängigkeitseigenschaften

Übersicht über Abhängigkeitseigenschaften