Comment : ajouter un type propriétaire d'une propriété de dépendance
Cet exemple montre comment ajouter une classe en tant que propriétaire d’une propriété de dépendance inscrite pour un type différent. En procédant ainsi, le lecteur XAML WPF et le système de propriétés sont tous deux en mesure de reconnaître la classe en tant que propriétaire supplémentaire de la propriété. L’ajout en tant que propriétaire permet éventuellement à la classe d’ajouter des métadonnées spécifiques au type.
Dans l’exemple suivant, StateProperty
est une propriété inscrite par la MyStateControl
classe. La classe UnrelatedStateControl
s’ajoute en tant que propriétaire de la méthode à l’aide StateProperty
de la AddOwner méthode, en particulier à l’aide de la signature qui permet de nouvelles métadonnées pour la propriété de dépendance telle qu’elle existe sur le type d’ajout. Notez que vous devez fournir des accesseurs CLR (Common Language Runtime) pour la propriété similaire à l’exemple illustré dans l’exemple Implémenter une propriété de dépendance, ainsi que réexécurer l’identificateur de propriété de dépendance sur la classe ajoutée en tant que propriétaire.
Sans wrappers, la propriété de dépendance fonctionne toujours du point de vue de l’accès par programmation à l’aide GetValue ou SetValue. Toutefois, vous souhaitez généralement mettre en parallèle ce comportement de système de propriétés avec les wrappers de propriétés CLR. Les wrappers facilitent la définition de la propriété de dépendance par programmation et permettent de définir les propriétés en tant qu’attributs XAML.
Pour savoir comment remplacer les métadonnées par défaut, consultez Remplacer les métadonnées d’une propriété de dépendance.
Exemple
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
Voir aussi
.NET Desktop feedback