CoerceValueCallback Delegar
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece um modelo para um método que é chamado sempre que um valor da propriedade de dependência está sendo reavaliado ou a coerção é especificamente solicitada.
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
O objeto na qual a propriedade existe. Quando o retorno de chamada for invocado, o sistema de propriedade passará esse valor.
- baseValue
- Object
O novo valor da propriedade, antes de qualquer tentativa de coerção.
Valor Retornado
O valor imposto (com o tipo apropriado).
Exemplos
O exemplo a seguir inclui uma implementação desse retorno de chamada para coagir o valor armazenado de uma propriedade de dependência com base em outras entradas, como o valor de outra propriedade. Nesse caso, o retorno de chamada verifica se a ShirtType
propriedade corresponde a um tipo de camisa que tem botões; nesse caso, ele estabelece uma cor padrão inicial para o ButtonColor
, se o tipo de camisa não tem botões, ele coagi o ButtonColor
valor de volta a um valor inicial, o que faz com que a interface do usuário (não mostrada) remova essa lista suspensa das escolhas efetivas.
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
Comentários
Os retornos de chamada com base CoerceValueCallback podem ser atribuídos a uma propriedade de dependência por meio de várias técnicas diferentes. Cada uma dessas técnicas requer que você primeiro crie um novo objeto de metadados de propriedade (PropertyMetadataou uma classe derivada, como FrameworkPropertyMetadata). Crie o objeto de metadados usando uma assinatura de construtor que usa o coerceValueCallback
parâmetro e atribua esse parâmetro ao manipulador de retorno de chamada. Ou construa os metadados por qualquer assinatura e defina a CoerceValueCallback propriedade antes de colocar os metadados em uso.
Quando você tiver esses metadados, poderá:
Defina uma nova propriedade de dependência em uma nova classe, usando uma assinatura de Register, dando os metadados como o
typeMetadata
valor.Substitua os metadados (chamada OverrideMetadata(Type, PropertyMetadata)) para uma propriedade de dependência existente, quando você deriva da classe que possui a propriedade de dependência.
Adicione uma propriedade de dependência existente a uma nova DependencyObject classe, usando novos metadados, chamando AddOwner(Type, PropertyMetadata).
As implementações desse retorno de chamada devem verificar o valor baseValue
e determinar com base no valor ou no tipo se esse é um valor que precisa ser coagido ainda mais.
A CoerceValueCallback propriedade for a dependency é invocada sempre que o sistema de propriedades ou qualquer outro chamador chama CoerceValue em uma DependencyObject instância, especificando o identificador dessa propriedade como o dp
.
As alterações no valor da propriedade podem ter vindo de qualquer participante possível no sistema de propriedades. Isso inclui estilos, invalidação genérica, gatilhos, herança de valor de propriedade e configuração de valor local.
Geralmente, você deve evitar especificar mais de uma CoerceValueCallback para qualquer propriedade de dependência específica (substituindo ou adicionando com novos metadados para uma propriedade de dependência que já tinha um CoerceValueCallback). Apenas um dos retornos de chamada será capaz de agir. O retorno de chamada interino será aquele que foi aplicado à classe mais derivada na herança em comparação com o DependencyObject chamador. Outros retornos de chamada atribuídos aos metadados para a propriedade de dependência como ela existia mais alto na hierarquia de proprietário são substituídos quando os metadados são substituídos.
Métodos de Extensão
GetMethodInfo(Delegate) |
Obtém um objeto que representa o método representado pelo delegado especificado. |