CoerceValueCallback Delegat
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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 ButtonColor
den 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 dp
angegeben 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. |