CoerceValueCallback Delegato

Definizione

Fornisce un modello per un metodo chiamato ogni volta che un valore della proprietà di dipendenza viene rivalutato o se è specificamente richiesta la coercizione.

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 

Parametri

d
DependencyObject

Oggetto nel quale esiste la proprietà. Quando viene richiamato il callback, il sistema di proprietà passa questo valore.

baseValue
Object

Nuovo valore della proprietà prima dei tentativi di coercizione.

Valore restituito

Object

Valore assegnato tramite coercizione (del tipo appropriato).

Esempio

L'esempio seguente include un'implementazione di questo callback per coercire il valore archiviato di una proprietà di dipendenza in base ad altri input, ad esempio il valore di un'altra proprietà. In questo caso, il callback verifica se la ShirtType proprietà corrisponde a un tipo di camicia con pulsanti, se stabilisce un colore predefinito iniziale per ButtonColor, se il tipo di camicia non ha pulsanti, comprime il ButtonColor valore a un valore iniziale, che causa la rimozione dell'elenco a discesa dall'elenco a discesa effettivo.

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

Commenti

I callback basati su CoerceValueCallback possono essere assegnati a una proprietà di dipendenza tramite diverse tecniche. Ognuna di queste tecniche richiede prima di tutto di creare un nuovo oggetto metadati delle proprietà (PropertyMetadatao una classe derivata, FrameworkPropertyMetadataad esempio ). Creare l'oggetto metadati usando una firma del costruttore che accetta il parametro e assegnare tale coerceValueCallback parametro al gestore di callback. Oppure costruire i metadati in base a qualsiasi firma e impostare la CoerceValueCallback proprietà prima di inserire i metadati in uso.

Quando si dispone di questi metadati, è possibile:

  • Definire una nuova proprietà di dipendenza in una nuova classe usando una firma di Register, fornendo i metadati come typeMetadata valore.

  • Eseguire l'override dei metadati (chiamata OverrideMetadata(Type, PropertyMetadata)) per una proprietà di dipendenza esistente, quando si deriva dalla classe che possiede la proprietà di dipendenza.

  • Aggiungere una proprietà di dipendenza esistente a una nuova DependencyObject classe usando nuovi metadati chiamando AddOwner(Type, PropertyMetadata).

Le implementazioni di questo callback devono controllare il valore in baseValue e determinare in base al valore o al tipo se si tratta di un valore che deve essere ulteriormente coercito.

L'oggetto CoerceValueCallback per una proprietà di dipendenza viene richiamato qualsiasi volta che il sistema di proprietà o qualsiasi altro chiamante CoerceValue in un'istanza DependencyObject , specificando l'identificatore della proprietà come dp.

Le modifiche apportate al valore della proprietà potrebbero venire da qualsiasi possibile partecipante al sistema delle proprietà. Sono inclusi stili, invalidazione generica, trigger, ereditarietà del valore della proprietà e impostazione del valore locale.

In genere, è consigliabile evitare di specificare più di una CoerceValueCallback per qualsiasi proprietà di dipendenza specificata (override o aggiunta di nuovi metadati per una proprietà di dipendenza che dispone già di un CoerceValueCallbackoggetto ). Solo uno dei callback sarà in grado di agire. Il callback che agisce sarà quello applicato alla classe più derivata dell'ereditarietà rispetto al DependencyObject chiamante. Altri callback assegnati ai metadati per la proprietà di dipendenza sono stati sostituiti in seguito all'override dei metadati nella gerarchia del proprietario.

Metodi di estensione

GetMethodInfo(Delegate)

Ottiene un oggetto che rappresenta il metodo rappresentato dal delegato specificato.

Si applica a

Vedi anche