DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Esegue l'override dei metadati di una proprietà di dipendenza di sola lettura rappresentata da questo identificatore di proprietà.
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)
Parametri
- forType
- Type
Tipo della proprietà di dipendenza e in cui deve essere eseguito l'override dei metadati.
- typeMetadata
- PropertyMetadata
Metadati forniti per il tipo.
Eccezioni
Tentativo di override dei metadati in una proprietà di dipendenza di sola lettura, che non può essere eseguito utilizzando questa firma.
I metadati sono già stati definiti per la proprietà, in quanto la proprietà è disponibile nel tipo specificato.
Esempio
Nell'esempio seguente vengono ignorati i metadati per una proprietà di dipendenza di sola lettura esistente ereditata da una classe. In questo caso, l'obiettivo dello scenario era aggiungere un callback di valore coerce che i metadati delle proprietà di base non hanno. È anche possibile eseguire l'override dei metadati per qualsiasi altro motivo per cui l'override dei metadati è in genere appropriato (modifica del valore predefinito, aggiunta FrameworkPropertyMetadataOptions di valori e così via).
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
Commenti
L'override dei metadati in una proprietà di dipendenza di sola lettura viene eseguita per motivi simili come l'override dei metadati in una proprietà di dipendenza di lettura-scrittura ed è limitata all'accesso a livello di chiave perché i comportamenti specificati nei metadati possono modificare il comportamento del set (il valore predefinito, ad esempio).
Come per le proprietà delle dipendenze di lettura-scrittura, l'override dei metadati in una proprietà di dipendenza di sola lettura deve essere eseguita prima di tale proprietà in uso dal sistema delle proprietà ,che equivale al momento in cui vengono create istanze specifiche di oggetti che registrano la proprietà. Le chiamate a OverrideMetadata devono essere eseguite solo all'interno dei costruttori statici del tipo che fornisce se stesso come forType
parametro di questo metodo o inizializzazione equivalente per tale classe.
Questo metodo inoltra in modo efficace al OverrideMetadata metodo, passando l'istanza DependencyPropertyKey come parametro chiave.