DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.