Partager via


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

Voir aussi

Concepts

Propriétés de dépendance personnalisées

Vue d'ensemble des propriétés de dépendance