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 solo lectura 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
Tipo en el que existe esta propiedad de dependencia y se deben invalidar los metadatos.
- typeMetadata
- PropertyMetadata
Metadatos proporcionados para este tipo.
Excepciones
Se intentó invalidar los metadatos en una propiedad de dependencia de lectura y escritura (no se puede hacer con esta firma).
Los metadatos ya se establecieron para la propiedad tal como existe 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 no tenían los metadatos de la propiedad base. También puede invalidar los metadatos por cualquiera de los otros motivos por los que reemplazar 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 a la invalidación de 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 y pasa la DependencyPropertyKey instancia como parámetro de clave.