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

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

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

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 значения.

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

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

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

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

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

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

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

GetMethodInfo(Delegate)

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

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

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