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