Share via


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