CoerceValueCallback Delegado
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í.
Proporciona una plantilla para un método al que se llama cuando se vuelve a evaluar el valor de una propiedad de dependencia o cuando se solicita específicamente la conversión.
public delegate System::Object ^ CoerceValueCallback(DependencyObject ^ d, System::Object ^ baseValue);
public delegate object CoerceValueCallback(DependencyObject d, object baseValue);
type CoerceValueCallback = delegate of DependencyObject * obj -> obj
Public Delegate Function CoerceValueCallback(d As DependencyObject, baseValue As Object) As Object
Parámetros
Objeto en el que existe la propiedad. Cuando se invoca la devolución de llamada, el sistema de propiedades pasará este valor.
- baseValue
- Object
Nuevo valor de la propiedad, antes de cualquier intento de conversión.
Valor devuelto
Valor convertido (con el tipo apropiado).
Ejemplos
En el ejemplo siguiente se incluye una implementación de esta devolución de llamada para convertir el valor almacenado de una propiedad de dependencia en función de otras entradas, como el valor de otra propiedad. En este caso, la devolución de llamada comprueba si la ShirtType
propiedad corresponde a un tipo de camisa que tiene botones; si es así, establece un color predeterminado inicial para , ButtonColor
si el tipo de camisa no tiene botones, convierte el ButtonColor
valor de nuevo en un valor inicial, lo que hace que la interfaz de usuario (no se muestra) quite esa lista desplegable de las opciones efectivas.
private static object CoerceButtonColor(DependencyObject d, object value)
{
ShirtTypes newShirtType = (d as Shirt).ShirtType;
if (newShirtType == ShirtTypes.Dress || newShirtType == ShirtTypes.Bowling)
{
return ButtonColors.Black;
}
return ButtonColors.None;
}
Private Shared Function CoerceButtonColor(ByVal d As DependencyObject, ByVal value As Object) As Object
Dim newShirtType As ShirtTypes = (TryCast(d, Shirt)).ShirtType
If newShirtType = ShirtTypes.Dress OrElse newShirtType = ShirtTypes.Bowling Then
Return ButtonColors.Black
End If
Return ButtonColors.None
End Function
Comentarios
Las devoluciones de llamada basadas en CoerceValueCallback se pueden asignar a una propiedad de dependencia a través de varias técnicas diferentes. Cada una de estas técnicas requiere que primero cree un nuevo objeto de metadatos de propiedad (PropertyMetadatao una clase derivada como FrameworkPropertyMetadata). Cree el objeto de metadatos mediante una firma de constructor que tome el coerceValueCallback
parámetro y asígnelo al controlador de devolución de llamada. O bien construya los metadatos por cualquier firma y establezca la CoerceValueCallback propiedad antes de poner los metadatos en uso.
Cuando tenga estos metadatos, puede hacer lo siguiente:
Defina una nueva propiedad de dependencia en una nueva clase, utilizando cualquiera de las firmas de Register, lo que proporciona los metadatos como
typeMetadata
valor.Invalide los metadatos (llame a OverrideMetadata(Type, PropertyMetadata)) para una propiedad de dependencia existente cuando derive de la clase que posee la propiedad de dependencia.
Agregue una propiedad de dependencia existente a una nueva DependencyObject clase mediante los nuevos metadatos mediante una llamada a AddOwner(Type, PropertyMetadata).
Las implementaciones de esta devolución de llamada deben comprobar el valor en baseValue
y determinar en función del valor o del tipo si se trata de un valor que debe ser coercido aún más.
Para CoerceValueCallback una propiedad de dependencia se invoca en cualquier momento que el sistema de propiedades o cualquier otro llamador llama CoerceValue a en una DependencyObject instancia, especificando el identificador de esa propiedad como dp
.
Es posible que los cambios realizados en el valor de la propiedad provengan de cualquier posible participante en el sistema de propiedades. Esto incluye estilos, invalidación genérica, desencadenadores, herencia de valores de propiedad y configuración de valor local.
Por lo general, debe evitar especificar más de una CoerceValueCallback para cualquier propiedad de dependencia determinada (invalidando o agregando con nuevos metadatos para una propiedad de dependencia que ya tenía un CoerceValueCallback). Solo una de las devoluciones de llamada podrá actuar. La devolución de llamada que actúa será la que se aplicó a la clase más derivada de la herencia en comparación con el autor de la DependencyObject llamada. Otras devoluciones de llamada asignadas a los metadatos de la propiedad de dependencia, ya que existían más arriba en la jerarquía de propietarios, se reemplazan cuando se invalidan los metadatos.
Métodos de extensión
GetMethodInfo(Delegate) |
Obtiene un objeto que representa el método representado por el delegado especificado. |