DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Remplace les métadonnées d’une propriété de dépendance en lecture seule représentée par cet identificateur de propriété de dépendance.
public:
void OverrideMetadata(Type ^ forType, System::Windows::PropertyMetadata ^ typeMetadata);
public void OverrideMetadata(Type forType, System.Windows.PropertyMetadata typeMetadata);
member this.OverrideMetadata : Type * System.Windows.PropertyMetadata -> unit
Public Sub OverrideMetadata (forType As Type, typeMetadata As PropertyMetadata)
Paramètres
- forType
- Type
Type sur lequel cette propriété de dépendance existe et les métadonnées doivent être remplacées.
- typeMetadata
- PropertyMetadata
Métadonnées fournies pour ce type.
Exceptions
Tentative de remplacement des métadonnées sur une propriété de dépendance en lecture-écriture (impossible d’utiliser cette signature).
Les métadonnées ont déjà été établies pour la propriété telle qu’elle existe sur le type fourni.
Exemples
L’exemple suivant remplace les métadonnées d’une propriété de dépendance en lecture seule existante qu’une classe hérite. Dans ce cas, l’objectif du scénario était d’ajouter un rappel de valeur cocédant que les métadonnées de propriété de base n’avaient pas. Vous pouvez également remplacer les métadonnées pour toutes les autres raisons pour lesquelles la substitution des métadonnées est généralement appropriée (modification de la valeur par défaut, ajout FrameworkPropertyMetadataOptions de valeurs, etc.)
static Fishbowl() {
Aquarium.AquariumSizeKey.OverrideMetadata(
typeof(Aquarium),
new PropertyMetadata(
double.NaN,
null,
new CoerceValueCallback(CoerceFishbowlAquariumSize)
)
);
}
static object CoerceFishbowlAquariumSize(DependencyObject d,Object baseValue)
{
//Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
Fishbowl fb = (Fishbowl)d;
//other constraints assure that H,W are positive
return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2));
}
Shared Sub New()
Aquarium.AquariumSizeKey.OverrideMetadata(GetType(Aquarium), New PropertyMetadata(Double.NaN, Nothing, New CoerceValueCallback(AddressOf CoerceFishbowlAquariumSize)))
End Sub
Private Shared Function CoerceFishbowlAquariumSize(ByVal d As DependencyObject, ByVal baseValue As Object) As Object
'Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
Dim fb As Fishbowl = CType(d, Fishbowl)
'other constraints assure that H,W are positive
Return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2))
End Function
Remarques
La substitution de métadonnées sur une propriété de dépendance en lecture seule est effectuée pour des raisons similaires, comme la substitution de métadonnées sur une propriété de dépendance en lecture-écriture, et est limitée à l’accès au niveau de la clé, car les comportements spécifiés dans les métadonnées peuvent modifier le comportement défini (la valeur par défaut, par exemple).
Comme pour les propriétés de dépendance en lecture-écriture, la substitution de métadonnées sur une propriété de dépendance en lecture seule doit être effectuée uniquement avant que cette propriété soit placée en cours d’utilisation par le système de propriétés (cela équivaut au moment où des instances spécifiques d’objets qui inscrivent la propriété sont instanciées). Les appels à ne OverrideMetadata doivent être effectués que dans les constructeurs statiques du type qui se fournit en tant que forType paramètre de cette méthode ou initialisation équivalente pour cette classe.
Cette méthode transfère efficacement à la OverrideMetadata méthode, en passant l’instance DependencyPropertyKey en tant que paramètre de clé.