Поделиться через


CoerceValueCallback Делегат

Определение

Предоставляет шаблон для метода, вызываемого при повторной оценке значения свойства зависимостей, или приведение запрашивается специально.

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 

Параметры

d
DependencyObject

Объект, в который существует свойство. При вызове обратного вызова система свойств передает это значение.

baseValue
Object

Новое значение свойства до любой попытки приведения.

Возвращаемое значение

Принудительное значение (с соответствующим типом).

Примеры

В следующем примере реализована реализация этого обратного вызова для принудительного применения хранимого значения свойства зависимостей на основе других входных данных, таких как значение другого свойства. В этом случае обратный вызов проверяет, соответствует ли ShirtType свойство типу рубашки, которая имеет кнопки; если он устанавливает начальный цвет по умолчанию для ButtonColorцвета, если тип рубашки не имеет кнопок, он принуждает ButtonColor значение обратно к начальному значению, что приводит к удалению пользовательского интерфейса (не показано), чтобы удалить этот раскрывающийся список из эффективных вариантов.

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

Комментарии

Обратные вызовы, основанные на CoerceValueCallback этом, можно назначить свойству зависимостей с помощью нескольких различных методов. Для каждого из этих методов необходимо сначала создать новый объект метаданных свойства (PropertyMetadataили производный класс, например FrameworkPropertyMetadata). Создайте объект метаданных с помощью сигнатуры конструктора, которая принимает coerceValueCallback параметр, и назначьте этот параметр обработчику обратного вызова. Или создайте метаданные с помощью любой сигнатуры и задайте CoerceValueCallback свойство перед добавлением метаданных в использование.

Если у вас есть эти метаданные, вы можете:

  • Определите новое свойство зависимостей для нового класса с помощью любой сигнатуры Register, предоставляя метаданные typeMetadata в качестве значения.

  • Переопределите метаданные (вызов OverrideMetadata(Type, PropertyMetadata)) для существующего свойства зависимостей при наследовалении от класса, который владеет свойством зависимостей.

  • Добавьте существующее свойство зависимостей в новый класс с помощью новых DependencyObject метаданных путем вызова AddOwner(Type, PropertyMetadata).

Реализации этого обратного вызова должны проверять значение и определяться на основе значения baseValue или типа, является ли это значением, которое необходимо принуждать.

Свойство CoerceValueCallback зависимости вызывается в любой момент, когда система свойств или любой другой вызывающий объект вызывает CoerceValue экземпляр DependencyObject , указав идентификатор этого свойства в качестве идентификатора dp.

Изменения значения свойства могут быть получены от любого возможного участника в системе свойств. К ним относятся стили, универсальное недопустимое действие, триггеры, наследование значений свойств и локальный параметр значений.

Как правило, следует избегать указания нескольких CoerceValueCallback для любого заданного свойства зависимости (переопределение или добавление новых метаданных для свойства зависимости, которое уже имело значение CoerceValueCallback). Только один из обратных вызовов сможет действовать. Обратный вызов действия будет тем, который был применен к наиболее производного класса в наследовании по сравнению с DependencyObject вызывающим объектом. Другие обратные вызовы, назначенные метаданным для свойства зависимостей, так как он существовал выше в иерархии владельца, заменяются при переопределении метаданных.

Методы расширения

Имя Описание
GetMethodInfo(Delegate)

Возвращает объект, представляющий метод, представленный указанным делегатом.

Применяется к

См. также раздел