CoerceValueCallback Delegat

Definition

Stellt eine Vorlage für eine Methode bereit, die aufgerufen wird, wenn der Wert einer Abhängigkeitseigenschaft erneut ausgewertet wird oder wenn ausdrücklich eine Umwandlung angefordert wird.

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 

Parameter

d
DependencyObject

Das Objekt, für das die Eigenschaft vorhanden ist. Wenn der Rückruf aufgerufen wird, übergibt das Eigenschaftensystem diesen Wert.

baseValue
Object

Der neue Wert der Eigenschaft vor einem Umwandlungsversuch.

Rückgabewert

Object

Der umgewandelte Wert (mit dem entsprechenden Typ).

Beispiele

Das folgende Beispiel enthält eine Implementierung dieses Rückrufs, um den gespeicherten Wert einer Abhängigkeitseigenschaft basierend auf anderen Eingaben wie dem Wert einer anderen Eigenschaft zu koerzen. In diesem Fall überprüft der Rückruf, ob die ShirtType Eigenschaft einem Typ von Hemd entspricht, das Schaltflächen enthält. Wenn dies der Fall ist, wird eine Startstandardfarbe für den ButtonColorHemdtyp ohne Schaltflächen eingerichtet, wird der ButtonColor Wert wieder auf einen Startwert zurückgerufen, wodurch die Benutzeroberfläche (nicht angezeigt) diese Dropdownliste aus den effektiven Auswahlmöglichkeiten entfernen kann.

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

Hinweise

Rückrufe basierend auf CoerceValueCallback einer Abhängigkeitseigenschaft können über mehrere verschiedene Techniken zugewiesen werden. Jede dieser Techniken erfordert, dass Sie zuerst ein neues Eigenschaftsmetadatenobjekt (PropertyMetadataoder eine abgeleitete Klasse wie z FrameworkPropertyMetadata. B. ) erstellen. Erstellen Sie das Metadatenobjekt mithilfe einer Konstruktorsignatur, die den coerceValueCallback Parameter verwendet, und weisen Sie diesen Parameter Ihrem Rückrufhandler zu. Oder erstellen Sie die Metadaten nach jeder Signatur, und legen Sie die CoerceValueCallback Eigenschaft fest, bevor die Metadaten verwendet werden.

Wenn Sie über diese Metadaten verfügen, können Sie Folgendes ausführen:

  • Definieren Sie eine neue Abhängigkeitseigenschaft für eine neue Klasse, indem Sie beide Signaturen Registerverwenden, und geben Sie die Metadaten als typeMetadata Wert.

  • Überschreiben Sie die Metadaten (Aufruf OverrideMetadata(Type, PropertyMetadata)) für eine vorhandene Abhängigkeitseigenschaft, wenn Sie von der Klasse abgeleitet werden, die die Abhängigkeitseigenschaft besitzt.

  • Fügen Sie eine vorhandene Abhängigkeitseigenschaft zu einer neuen DependencyObject Klasse hinzu, indem Sie neue Metadaten verwenden, indem Sie aufrufen AddOwner(Type, PropertyMetadata).

Implementierungen dieses Rückrufs sollten den Wert überprüfen und anhand des Werts baseValue oder des Typs ermitteln, ob es sich um einen Wert handelt, der weiter gekoerdet werden muss.

Die CoerceValueCallback für eine Abhängigkeitseigenschaft wird jedes Mal aufgerufen, wenn das Eigenschaftssystem oder ein anderer Aufrufer eine DependencyObject Instanz aufruftCoerceValue, wobei der Bezeichner dieser Eigenschaft als die dp.

Änderungen am Eigenschaftswert können von jedem möglichen Teilnehmer im Eigenschaftssystem stammen. Dazu gehören Formatvorlagen, generische Ungültigheit, Trigger, Eigenschaftswertvererbung und lokale Werteinstellung.

Im Allgemeinen sollten Sie vermeiden, mehrere CoerceValueCallback für eine bestimmte Abhängigkeitseigenschaft anzugeben (außer Kraft setzen oder mit neuen Metadaten für eine Abhängigkeitseigenschaft hinzufügen, die bereits eine CoerceValueCallback) Nur eine der Rückrufe kann handeln. Der handelnde Rückruf ist das Element, das im Vergleich zum DependencyObject Aufrufer auf die am meisten abgeleitete Klasse in der Vererbung angewendet wurde. Andere Rückrufe, die Metadaten für die Abhängigkeitseigenschaft zugewiesen sind, wie sie höher in der Besitzerhierarchie vorhanden sind, werden ersetzt, wenn die Metadaten außer Kraft gesetzt werden.

Erweiterungsmethoden

GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird.

Gilt für:

Siehe auch