Condividi tramite


CoerceValueCallback Delegato

Definizione

Fornisce un modello per un metodo chiamato ogni volta che viene rivalutato un valore della proprietà di dipendenza o viene richiesta una coercizione specifica.

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 su cui è presente la proprietà. Quando viene richiamato il callback, il sistema di proprietà passerà questo valore.

baseValue
Object

Nuovo valore della proprietà, prima di qualsiasi tentativo di coercizione.

Valore restituito

Valore coercito (con tipo appropriato).

Esempio

Nell'esempio seguente è inclusa un'implementazione di questo callback per comerare 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. In tal caso, stabilisce un colore predefinito iniziale per , ButtonColorse il tipo di camicia non dispone di pulsanti, forza il ButtonColor valore a un valore iniziale, che fa sì che l'interfaccia utente (non visualizzata) elimini tale elenco a discesa dalle scelte effettive.

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 di proprietà (PropertyMetadatao una classe derivata, FrameworkPropertyMetadataad esempio ). Creare l'oggetto metadati usando una firma del costruttore che accetta il coerceValueCallback parametro e assegnare tale parametro al gestore di callback. In alternativa, 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 delle firme di Register, assegnando i metadati come typeMetadata valore.

  • Eseguire l'override dei metadati (chiamare OverrideMetadata(Type, PropertyMetadata)) per una proprietà di dipendenza esistente, quando si deriva dalla classe proprietaria della 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.

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

Le modifiche apportate al valore della proprietà possono provenire da qualsiasi possibile partecipante del sistema di proprietà. Sono inclusi gli stili, l'invalidazione generica, i trigger, l'ereditarietà del valore della proprietà e l'impostazione del valore locale.

In genere è consigliabile evitare di specificare più di una CoerceValueCallback per una determinata proprietà di dipendenza (override o aggiunta di nuovi metadati per una proprietà di dipendenza che dispone già di ).CoerceValueCallback Solo uno dei callback sarà in grado di agire. Il callback che agisce sarà quello applicato alla classe più derivata nell'ereditarietà rispetto al DependencyObject chiamante. Altri callback assegnati ai metadati per la proprietà di dipendenza così come esistevano più in alto nella gerarchia del proprietario vengono sostituiti quando i metadati vengono sottoposti a override.

Metodi di estensione

Nome Descrizione
GetMethodInfo(Delegate)

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

Si applica a

Vedi anche