DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Metodo

Definizione

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.

Si applica a

Vedi anche