CoerceValueCallback Delegate

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.Provides a template for a method that is called whenever a dependency property value is being re-evaluated, or coercion is specifically requested.

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 

Parameters

d
DependencyObject

Das Objekt, für das die Eigenschaft vorhanden ist.The object that the property exists on. Wenn der Rückruf aufgerufen wird, übergibt das Eigenschaftensystem diesen Wert.When the callback is invoked, the property system will pass this value.

baseValue
Object

Der neue Wert der Eigenschaft vor einem Umwandlungsversuch.The new value of the property, prior to any coercion attempt.

Return Value

Object

Der umgewandelte Wert (mit dem entsprechenden Typ).The coerced value (with appropriate type).

Inheritance
CoerceValueCallback

Examples

Das folgende Beispiel schließt eine Implementierung dieses Rückrufs ein, um den gespeicherten Wert einer Abhängigkeits Eigenschaft auf der Grundlage anderer Eingaben (z. b. eines anderen Eigenschafts Werts) umzuleiten.The following example includes an implementation of this callback to coerce the stored value of a dependency property based on other inputs, such as another property's value. In diesem Fall prüft der Rückruf, ob die ShirtType-Eigenschaft einem Shirt-Typ entspricht, der über Schaltflächen verfügt. Wenn dies der Fall ist, wird eine Standardfarbe für den ButtonColorfestgelegt. wenn der Shirt-Typ keine Schaltflächen aufweist, wird der ButtonColor Wert zurück in einen Startwert umgewandelt, der bewirkt, dass der UIUI (nicht angezeigt) diese Dropdown Liste aus den effektiven Optionen entfernt.In this case, the callback checks to see whether the ShirtType property corresponds to a type of shirt that has buttons; if so it establishes a starting default color for the ButtonColor, if the shirt type has no buttons, it coerces the ButtonColor value back to a starting value, which causes the UIUI (not shown) to remove that dropdown from the effective choices.

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

Remarks

Rückrufe, die auf CoerceValueCallback basieren, können mithilfe verschiedener Verfahren einer Abhängigkeits Eigenschaft zugewiesen werden.Callbacks based on CoerceValueCallback can be assigned to a dependency property through several different techniques. Jede dieser Techniken erfordert, dass Sie zunächst ein neues eigenschaftenmetadatenobjekt erstellen (PropertyMetadataoder eine abgeleitete Klasse, z. b. FrameworkPropertyMetadata).Each of these techniques requires that you first create a new property metadata object (PropertyMetadata, or a derived class such as FrameworkPropertyMetadata). Erstellen Sie das Metadatenobjekt, indem Sie eine Konstruktorsignatur verwenden, die den coerceValueCallback-Parameter annimmt, und weisen Sie diesen Parameter Ihrem Rückruf Handler zu.Create the metadata object using a constructor signature that takes the coerceValueCallback parameter, and assign that parameter to your callback handler. Oder erstellen Sie die Metadaten durch eine beliebige Signatur, und legen Sie die CoerceValueCallback-Eigenschaft vor dem Einfügen der verwendeten Metadaten fest.Or construct the metadata by any signature and set the CoerceValueCallback property prior to putting the metadata in use.

Wenn Sie über diese Metadaten verfügen, können Sie folgende Aktionen ausführen:When you have this metadata, you can:

  • Definieren Sie eine neue Abhängigkeits Eigenschaft für eine neue Klasse, wobei Sie entweder eine Signatur von Registerverwenden und die Metadaten als typeMetadata Wert angeben.Define a new dependency property on a new class, using either signature of Register, giving the metadata as the typeMetadata value.

  • Überschreiben Sie die Metadaten (CallOverrideMetadata(Type, PropertyMetadata)) für eine vorhandene Abhängigkeits Eigenschaft, wenn Sie von der Klasse ableiten, die die Abhängigkeits Eigenschaft besitzt.Override the metadata (call OverrideMetadata(Type, PropertyMetadata)) for an existing dependency property, when you derive from the class that owns the dependency property.

  • Fügen Sie einer neuen DependencyObject Klasse eine vorhandene Abhängigkeits Eigenschaft hinzu, indem Sie die neuen Metadaten aufrufen, indem Sie AddOwner(Type, PropertyMetadata)aufrufen.Add an existing dependency property to a new DependencyObject class, using new metadata, by calling AddOwner(Type, PropertyMetadata).

Implementierungen dieses Rückrufs sollten den Wert in baseValue überprüfen und entweder basierend auf dem Wert oder dem Typ ermitteln, ob es sich um einen Wert handelt, der weiter umgewandelt werden muss.Implementations of this callback should check the value in baseValue and determine based on either the value or the type whether this is a value that needs to be further coerced.

Der CoerceValueCallback für eine Abhängigkeits Eigenschaft wird immer dann aufgerufen, wenn das Eigenschaften System oder ein anderer Aufrufer CoerceValue in einer DependencyObject Instanz aufruft, wobei der Bezeichner der Eigenschaft als dpangegeben wird.The CoerceValueCallback for a dependency property is invoked any time that the property system or any other caller calls CoerceValue on a DependencyObject instance, specifying that property's identifier as the dp.

Änderungen am Eigenschafts Wert können von einem beliebigen möglichen Teilnehmer im Eigenschaften System stammen.Changes to the property value may have come from any possible participant in the property system. Dies schließt Stile, generische Invalidierung, Trigger, Eigenschafts Wert Vererbung und lokale Wert Einstellungen ein.This includes styles, generic invalidation, triggers, property value inheritance, and local value setting.

Im Allgemeinen sollten Sie nicht mehr als eine CoerceValueCallback für eine bestimmte Abhängigkeits Eigenschaft angeben (außer Kraft setzen oder mit neuen Metadaten für eine Abhängigkeits Eigenschaft hinzufügen, die bereits eine CoerceValueCallbackhatte).Generally you should avoid specifying more than one CoerceValueCallback for any given dependency property (overriding or adding with new metadata for a dependency property that already had a CoerceValueCallback). Nur einer der Rückrufe ist in der Lage, zu agieren. Der aktive Rückruf ist der, der auf die am meisten abgeleitete Klasse in der Vererbung im Vergleich zum DependencyObject Aufrufer angewendet wurde.Only one of the callbacks will be able to act. The acting callback will be the one that was applied to the most derived class in the inheritance as compared to the DependencyObject caller. Andere Rückrufe, die Metadaten für die Abhängigkeits Eigenschaft zugeordnet sind, wie Sie in der Besitzer Hierarchie höher vorhanden waren, werden ersetzt, wenn die Metadaten überschrieben werden.Other callbacks as assigned to metadata for the dependency property as it existed higher in the owner hierarchy are replaced when the metadata is overridden.

Extension Methods

GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird.Gets an object that represents the method represented by the specified delegate.

Applies to

See also