Udostępnij za pośrednictwem


CoerceValueCallback Delegat

Definicja

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

d
DependencyObject

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 ButtonColorelementu , 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.

Dotyczy

Zobacz też