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
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für