Freigeben über


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

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, z. B. dem Wert einer anderen Eigenschaft, zu erkoerieren. In diesem Fall überprüft der Rückruf, ob die ShirtType Eigenschaft einem Typ von Hemd mit Schaltflächen entspricht. Wenn dies der Fall ist, wird eine Standardfarbe für ButtonColorden festgelegt, wenn der Shirttyp keine Schaltflächen aufweist, wird der ButtonColor Wert wieder in einen Startwert umgewandelt, wodurch die Benutzeroberfläche (nicht angezeigt) diese Dropdownliste aus den effektiven Optionen entfernt.

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 können einer Abhängigkeitseigenschaft mithilfe verschiedener Techniken zugewiesen werden. Jede dieser Techniken erfordert, dass Sie zuerst ein neues Eigenschaftsmetadatenobjekt (PropertyMetadataoder eine abgeleitete Klasse wie FrameworkPropertyMetadata) erstellen. Erstellen Sie das Metadatenobjekt mithilfe einer Konstruktorsignatur, die den coerceValueCallback Parameter akzeptiert, und weisen Sie diesen Parameter Ihrem Rückrufhandler zu. Oder erstellen Sie die Metadaten mit einer beliebigen Signatur, und legen Sie die CoerceValueCallback Eigenschaft fest, bevor Sie die Metadaten verwenden.

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

  • Definieren Sie eine neue Abhängigkeitseigenschaft für eine neue Klasse, indem Sie eine signatur von Registerverwenden, wobei die Metadaten als typeMetadata Wert angegeben werden.

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

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

Implementierungen dieses Rückrufs sollten den Wert in baseValue überprüfen und basierend auf dem Wert oder dem Typ bestimmen, ob es sich um einen Wert handelt, der weiter geerct werden muss.

Der CoerceValueCallback für eine Abhängigkeitseigenschaft wird jedes Mal aufgerufen, wenn das Eigenschaftensystem oder ein anderer Aufrufer für eine DependencyObject -Instanz aufruftCoerceValue, wobei der Bezeichner dieser Eigenschaft als dpangegeben wird.

Änderungen am Eigenschaftswert können von jedem möglichen Teilnehmer am Eigenschaftensystem stammen. Dazu gehören Stile, generische Invalidierung, Trigger, Vererbung von Eigenschaftswerten und lokale Werteinstellungen.

Im Allgemeinen sollten Sie es vermeiden, mehr als eine CoerceValueCallback für eine bestimmte Abhängigkeitseigenschaft anzugeben (das Überschreiben oder Hinzufügen mit neuen Metadaten für eine Abhängigkeitseigenschaft, die bereits über eine CoerceValueCallbackverfügt. Nur einer der Rückrufe kann handeln. Der handelnde Rückruf ist derjenige, der im Vergleich zum DependencyObject Aufrufer auf die am häufigsten abgeleitete Klasse in der Vererbung angewendet wurde. Andere Rückrufe, die Metadaten für die Abhängigkeitseigenschaft zugewiesen sind, da sie höher in der Besitzerhierarchie vorhanden ist, werden ersetzt, wenn die Metadaten überschrieben werden.

Erweiterungsmethoden

GetMethodInfo(Delegate)

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

Gilt für:

Weitere Informationen