Compartir a través de


DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Método

Definición

Invalida los metadatos de una propiedad de dependencia de sólo lectura que está representada por este identificador de propiedad de dependencia.

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)

Parámetros

forType
Type

Se deben invalidar el tipo en el que existe esta propiedad de dependencia y los metadatos.

typeMetadata
PropertyMetadata

Metadatos proporcionados para este tipo.

Excepciones

Se ha intentado invalidar metadatos en una propiedad de dependencia de lectura y escritura (no se puede hacer utilizando esta firma).

Los metadatos ya estaban establecidos para la propiedad tal y como existen en el tipo proporcionado.

Ejemplos

En el ejemplo siguiente se invalidan los metadatos de una propiedad de dependencia de solo lectura existente que hereda una clase. En este caso, el objetivo del escenario era agregar una devolución de llamada de valor de coerce que los metadatos de la propiedad base no tenían. También puede invalidar los metadatos por cualquiera de los otros motivos por los que invalidar los metadatos suele ser adecuado (cambiar el valor predeterminado, agregar FrameworkPropertyMetadataOptions valores, 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

Comentarios

La invalidación de metadatos en una propiedad de dependencia de solo lectura se realiza por motivos similares como invalidar los metadatos en una propiedad de dependencia de lectura y escritura, y está restringido al acceso en el nivel de clave porque los comportamientos especificados en los metadatos pueden cambiar el comportamiento establecido (el valor predeterminado, por ejemplo).

Al igual que con las propiedades de dependencia de lectura y escritura, la invalidación de metadatos en una propiedad de dependencia de solo lectura solo debe realizarse antes de que el sistema de propiedades coloque esa propiedad en uso (esto equivale al momento en que se crean instancias específicas de objetos que registran la propiedad). Las llamadas a OverrideMetadata solo deben realizarse dentro de los constructores estáticos del tipo que se proporciona como parámetro forType de este método o inicialización equivalente para esa clase.

Este método reenvía eficazmente al OverrideMetadata método , pasando la DependencyPropertyKey instancia como parámetro de clave.

Se aplica a

Consulte también