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 зависимости вызывается в любой момент, когда система свойств или любой другой вызывающий объект вызывает CoerceValue экземпляр DependencyObject , указав идентификатор этого свойства в качестве идентификатора dp.
Изменения значения свойства могут быть получены от любого возможного участника в системе свойств. К ним относятся стили, универсальное недопустимое действие, триггеры, наследование значений свойств и локальный параметр значений.
Как правило, следует избегать указания нескольких CoerceValueCallback для любого заданного свойства зависимости (переопределение или добавление новых метаданных для свойства зависимости, которое уже имело значение CoerceValueCallback). Только один из обратных вызовов сможет действовать. Обратный вызов действия будет тем, который был применен к наиболее производного класса в наследовании по сравнению с DependencyObject вызывающим объектом. Другие обратные вызовы, назначенные метаданным для свойства зависимостей, так как он существовал выше в иерархии владельца, заменяются при переопределении метаданных.
Методы расширения
| Имя | Описание |
|---|---|
| GetMethodInfo(Delegate) |
Возвращает объект, представляющий метод, представленный указанным делегатом. |