CoerceValueCallback Delegato
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
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
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. |