CoerceValueCallback Delegado

Definición

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

d
DependencyObject

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

Object

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 , ButtonColorsi 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.

Se aplica a

Consulte también