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


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 свойства зависимостей вызывается каждый раз, когда система свойств или любой другой вызывающий DependencyObject объект вызывает CoerceValue для экземпляра, указывая идентификатор этого свойства в dpкачестве .

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

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

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

GetMethodInfo(Delegate)

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

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

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