Partager via


Comment : substituer les métadonnées d'une propriété de dépendance

Mise à jour : novembre 2007

Cet exemple montre comment remplacer des métadonnées de propriété de dépendance par défaut héritées d'une classe en appelant la méthode OverrideMetadata et en fournissant des métadonnées de type.

Exemple

En définissant ses PropertyMetadata, une classe peut définir les comportements de la propriété de dépendance , tels que sa valeur par défaut et ses rappels de système de propriétés. Un grand nombre de classes de propriété de dépendance disposent de métadonnées par défaut définies dans le cadre de leur processus d'inscription. Cela inclut les propriétés de dépendance qui font partie de WPFAPI. Une classe qui hérite de la propriété de dépendance via son héritage de classe peut remplacer les métadonnées d'origine pour que les caractéristiques de la propriété qui peut être altérée à travers des métadonnées réponde aux conditions de sous-classe.

Le remplacement des métadonnées dans une propriété de dépendance doit être effectué avant que la propriété soit placée pour être utilisée par le système de propriétés (cela correspond au moment où des instances spécifiques des objets qui inscrivent la propriété sont instanciées). Les appels à OverrideMetadata doivent être effectués dans les constructeurs statiques du type qui correspond lui-même au paramètre forType de OverrideMetadata. Si vous essayez de modifier les métadonnées lorsque les instances du type propriétaire existent , vous ne levez pas d'exception, mais vous générez des comportements incohérents dans le système de propriétés. En outre, les métadonnées peuvent être remplacées une seule fois par type. Toute nouvelle tentative de remplacement des métadonnées dans le même type lève une exception.

Dans l'exemple suivant, la classe personnalisée MyAdvancedStateControl remplace les métadonnées fournies pour StateProperty par MyAdvancedStateControl par de nouvelles métadonnées de propriété. Par exemple, la valeur par défaut de la StateProperty est maintenant true lorsque la propriété est interrogée dans une nouvelle instance MyAdvancedStateControl construite.

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 MyAdvancedStateControl : MyStateControl
{
  public MyAdvancedStateControl() : base() { }
  static MyAdvancedStateControl()
  {
    MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata(true));
  }
}

Voir aussi

Concepts

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

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

Référence

DependencyProperty

Autres ressources

Rubriques Comment relatives aux propriétés

Exemples de propriétés