Share via


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

In diesem Beispiel wird veranschaulicht, wie man als Besitzer einer Abhängigkeitseigenschaft, die für einen anderen Typ registriert ist, eine Klasse hinzufügt. Dadurch kann das WPF-XAML-Lese- und Eigenschaftssystem die Klasse als zusätzlicher Besitzer der Eigenschaft erkennen. Das Hinzufügen als Besitzer ermöglicht optional das Hinzufügen einer Klasse, um typspezifische Metadaten bereitzustellen.

Im folgenden Beispiel ist StateProperty eine Eigenschaft, die von der Klasse MyStateControl registriert wird. Die Klasse UnrelatedStateControl fügt sich selbst mithilfe der AddOwner-Methode als Besitzer der StateProperty hinzu, insbesondere mithilfe der Signatur, die neue Metadaten für die Abhängigkeitseigenschaft zulässt, da sie für den hinzufügenden Typ vorhanden ist. Beachten Sie, dass Sie Common Language Runtime (CLR)-Accessors für die Eigenschaft bereitstellen sollten, ähnlich dem in Implementieren einer Abhängigkeitseigenschaft gezeigten Beispiel, sowie den Bezeichner der Abhängigkeitseigenschaft in der Klasse, die als Eigentümer hinzugefügt wird, erneut verfügbar machen sollten.

Ohne Wrapper würde die Abhängigkeitseigenschaft aus der Perspektive des programmgesteuerten Zugriffs über GetValue oder SetValue weiterhin funktionieren. In der Regel sollten Sie dieses Verhalten des Eigenschaftssystems jedoch mit den CLR-Eigenschaftswrappern parallelisieren. Die Wrapper erleichtern es, die Abhängigkeitseigenschaft programmgesteuert festzulegen und ermöglichen das Festlegen der Eigenschaften als XAML-Attribute.

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

Beispiel

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

Weitere Informationen