CoerceValueCallback Delegat
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zawiera szablon metody, która jest wywoływana za każdym razem, gdy wartość właściwości zależności jest ponownie obliczana lub żądanie przymusu.
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
Parametry
Obiekt, na który istnieje właściwość . Po wywołaniu wywołania zwrotnego system właściwości przekaże tę wartość.
- baseValue
- Object
Nowa wartość właściwości przed próbą przymusu.
Wartość zwracana
Wartość przymusowa (z odpowiednim typem).
Przykłady
Poniższy przykład zawiera implementację tego wywołania zwrotnego w celu przesuniania przechowywanej wartości właściwości zależności na podstawie innych danych wejściowych, takich jak wartość innej właściwości. W tym przypadku wywołanie zwrotne sprawdza, czy ShirtType
właściwość odpowiada typowi koszuli z przyciskami. Jeśli tak, ustanawia domyślny kolor początkowy dla ButtonColor
elementu , jeśli typ koszuli nie ma przycisków, przekształca ButtonColor
wartość z powrotem do wartości początkowej, co powoduje, że interfejs użytkownika (nie pokazany) usuwa tę listę rozwijaną z efektywnych wyborów.
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
Uwagi
Wywołania zwrotne oparte na CoerceValueCallback można przypisać do właściwości zależności za pomocą kilku różnych technik. Każda z tych technik wymaga uprzedniego utworzenia nowego obiektu metadanych właściwości (PropertyMetadatalub klasy pochodnej, takiej jak FrameworkPropertyMetadata). Utwórz obiekt metadanych przy użyciu podpisu konstruktora, który przyjmuje coerceValueCallback
parametr, i przypisz ten parametr do programu obsługi wywołania zwrotnego. Lub skonstruuj metadane według dowolnego podpisu i ustaw CoerceValueCallback właściwość przed umieszczeniem metadanych w użyciu.
Jeśli masz te metadane, możesz wykonywać następujące czynności:
Zdefiniuj nową właściwość zależności dla nowej klasy przy użyciu dowolnego podpisu Register, podając metadane jako
typeMetadata
wartość.Zastąpij metadane (wywołaj OverrideMetadata(Type, PropertyMetadata)metodę ) dla istniejącej właściwości zależności, gdy pochodzisz z klasy będącej właścicielem właściwości zależności.
Dodaj istniejącą właściwość zależności do nowej DependencyObject klasy przy użyciu nowych metadanych, wywołując metodę AddOwner(Type, PropertyMetadata).
Implementacje tego wywołania zwrotnego powinny sprawdzać wartość i baseValue
określać na podstawie wartości lub typu, czy jest to wartość, która musi być dalej zmuszana.
Właściwość CoerceValueCallback dla zależności jest wywoływana za każdym razem, gdy system właściwości lub dowolny inny obiekt wywołujący wywołuje CoerceValueDependencyObject wystąpienie, określając identyfikator tej właściwości jako dp
.
Zmiany wartości właściwości mogły pochodzić od każdego możliwego uczestnika w systemie właściwości. Obejmuje to style, unieważnienie ogólne, wyzwalacze, dziedziczenie wartości właściwości i ustawienie wartości lokalnej.
Ogólnie rzecz biorąc, należy unikać określania więcej niż jednej CoerceValueCallback dla dowolnej właściwości zależności (zastępowanie lub dodawanie z nowymi metadanymi dla właściwości zależności, która miała CoerceValueCallbackjuż wartość ). Tylko jedno z wywołań zwrotnych będzie mogło działać. Działające wywołanie zwrotne będzie tym, który został zastosowany do najbardziej pochodnej klasy w dziedziczeniu w porównaniu z obiektem wywołującym DependencyObject . Inne wywołania zwrotne przypisane do metadanych dla właściwości zależności, ponieważ istniały one wyżej w hierarchii właściciela, są zastępowane podczas zastępowania metadanych.
Metody rozszerzania
GetMethodInfo(Delegate) |
Pobiera obiekt reprezentujący metodę reprezentowaną przez określonego delegata. |