Comment : ajouter un type propriétaire d'une propriété de dépendance
Cet exemple montre comment ajouter une classe sous la forme d'un propriétaire d'une propriété de dépendance inscrite pour un type différent. En procédant ainsi, le lecteur WPFXAML et le système de propriétés peuvent reconnaître la classe en tant que propriétaire supplémentaire de la propriété. L'ajout comme propriétaire permet éventuellement d'ajouter une classe pour fournir des métadonnées de type.
Dans l'exemple suivant, StateProperty est une propriété inscrite par la classe MyStateControl. La classe UnrelatedStateControl s'ajoute comme un propriétaire de la StateProperty à l'aide de la méthode AddOwner, spécifiquement en utilisant la signature qui tient compte des nouvelles métadonnées de la propriété de dépendance telles qu'elles existent dans le type d'ajout. Notez que vous devez fournir des accesseurs common language runtime (CLR) pour la propriété semblables à ceux de l'exemple Comment : implémenter une propriété de dépendance, et réexposer l'identificateur de propriété de dépendance dans la classe ajoutée comme propriétaire.
Sans wrappers, la propriété de dépendance continuerait de fonctionner du point de vue de l'accès par programme en utilisant GetValue ou SetValue. Mais vous voulez en fait placer parallèlement ce comportement de système de propriétés avec les wrappers de propriété CLR. Les wrappers simplifient la définition de propriété de dépendance par programme et permettent de définir les propriétés comme attributs XAML.
Pour savoir comment remplacer les métadonnées par défaut, consultez Comment : substituer les métadonnées d'une propriété de dépendance.
Exemple
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); }
}
}