Прочитать на английском

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


CoerceValueCallback Делегат

Определение

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

C#
public delegate object CoerceValueCallback(DependencyObject d, object baseValue);

Параметры

d
DependencyObject

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

baseValue
Object

Новое значение свойства до применения операции запрета изменения значения.

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

Запрещенное значение (с соответствующим типом).

Примеры

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

C#
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;
}

Комментарии

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

При наличии этих метаданных вы можете:

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

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

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

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

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

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

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

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

GetMethodInfo(Delegate)

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

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

Продукт Версии
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

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