Freigeben über


CoerceValueCallback Delegat

Definition

Stellt eine Vorlage für eine Methode bereit, die aufgerufen wird, wenn ein Abhängigkeitseigenschaftswert erneut ausgewertet wird oder die Koersion speziell 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 Koersionsversuch.

Rückgabewert

Der koercierte 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 koerzen. In diesem Fall überprüft der Rückruf, ob die ShirtType Eigenschaft einem Hemdtyp entspricht, der Über Schaltflächen verfügt. Wenn dies der Fall ist, wird eine Startstandardfarbe für den ButtonColorHemdtyp festgelegt, wenn der Hemdtyp keine Schaltflächen aufweist, er ButtonColor den Wert wieder auf einen Startwert zurückerzeigert, wodurch die Benutzeroberfläche (nicht dargestellt) diese Dropdownliste aus den effektiven Auswahlmöglichkeiten 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, die auf CoerceValueCallback einer Abhängigkeitseigenschaft basieren, können über verschiedene Techniken zugewiesen werden. Jede dieser Techniken erfordert, dass Sie zuerst ein neues Eigenschaftsmetadatenobjekt (PropertyMetadataoder eine abgeleitete Klasse wie FrameworkPropertyMetadataz. B. ) erstellen. Erstellen Sie das Metadatenobjekt mithilfe einer Konstruktorsignatur, die den coerceValueCallback Parameter verwendet, und weisen Sie diesen Parameter dem Rückrufhandler zu. Oder konstruieren Sie die Metadaten nach einer beliebigen Signatur, und legen Sie die CoerceValueCallback Eigenschaft fest, bevor die Metadaten verwendet werden.

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

  • Definieren Sie eine neue Abhängigkeitseigenschaft für eine neue Klasse, wobei eine der Signaturen Registerverwendet wird, wobei die Metadaten als typeMetadata Wert verwendet werden.

  • Ü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.AddOwner(Type, PropertyMetadata)

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

Die 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 die dp.

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

Im Allgemeinen sollten Sie nicht mehr als eine CoerceValueCallback für eine bestimmte Abhängigkeitseigenschaft angeben (Außerkraftsetzung oder Hinzufügen mit neuen Metadaten für eine Abhängigkeitseigenschaft, die bereits über eine CoerceValueCallbackAbhängigkeitseigenschaft verfügte). Nur einer der Rückrufe kann handeln. Der handelnde Rückruf ist der, der im Vergleich zum DependencyObject Aufrufer auf die 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

Name Beschreibung
GetMethodInfo(Delegate)

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

Gilt für:

Weitere Informationen