GetErrorsFromAnnotations(columnName,
typeof(Car)
.GetProperty(columnName)?.GetValue(this,null));
if (errorsFromAnnotations != null)
{
AddErrors(columnName, errorsFromAnnotations);
}
switch (columnName)
{
case nameof(Id):
break;
case nameof(Make):
CheckMakeAndColor();
if (Make == "ModelT")
{
AddError(nameof(Make), "Too Old");
}
break;
case nameof(Color):
CheckMakeAndColor();
break;
case nameof(PetName):
break;
}
return string.Empty;
}
}
Запустите приложение, выберите один из автомобилей и введите в поле Color текст, содержащий более 50 символов. После превышения порога в 50 символов аннотация данных StringLength
создает ошибку проверки достоверности, которая сообщается пользователю (рис. 28.5).
Настройка свойства ErrorTemplate
Финальной темой является создание стиля, который будет применяться, когда элемент управления содержит ошибку, а также обновление ErrorTemplate
для отображения более осмысленного сообщения об ошибке. Как объяснялось в главе 27, элементы управления допускают настройку посредством стилей и шаблонов элементов управления.
Начните с добавления в раздел Window.Resources
файла MainWindow.xaml
нового стиля с целевым типом TextBox
. Добавьте к стилю триггер, который устанавливает свойства, когда свойство Validation.HasError
имеет значение true
. Свойствами и устанавливаемыми значениями являются Background(Pink)
, Foreground(Black)
и ToolTip(ErrorContent)
. В элементах Setter
для свойств Background
и Foreground
нет ничего нового, но синтаксис установки свойства ToolTip
требует пояснения. Привязка (Binding
) указывает на элемент управления, к которому применяется данный стиль, в этом случае TextBox
. Путь (Path
) представляет собой первое значение ErrorContent
в коллекции Validation.Errors
. Разметка выглядит следующим образом:
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
Запустите приложение и создайте условие для ошибки. Результат будет подобен тому, что показан на рис. 28.6, и укомплектован всплывающей подсказкой с сообщением об ошибке.
Определенный выше стиль изменяет внешний вид любого элемента управления TextBox
, который содержит ошибку. Далее мы создадим специальный шаблон элемента управления с целью обновления свойства ErrorTemplate
класса Validation
, чтобы отобразить восклицательный знак красного цвета и установить всплывающие подсказки для восклицательного знака. Шаблон ErrorTemplate
является декоратором, который располагается поверх элемента управления. Хотя только что созданный стиль обновляет сам элемент управления, шаблон ErrorTemplate
будет размещаться поверх элемента управления.
Поместите элемент Setter
непосредственно после закрывающего дескриптора Style.Triggers
внутри созданного стиля. Вы будете создавать шаблон элемента управления, состоящий из элемента TextBlock
(для отображения восклицательного знака) и элемента BorderBrush
, который окружает TextBox
, содержащий сообщение об ошибке (или несколько сообщений). В языке XAML предусмотрен специальный дескриптор для элемента управления, декорированного с помощью ErrorTemplate
, под названием AdornedElementPlaceholder
. Добавляя имя такого элемента управления, можно получить доступ к ошибкам, которые ассоциированы с элементом управления. В рассматриваемом примере вас интересует доступ к свойству Validation.Errors
с целью получения ErrorContent
(как делалось в Style.Trigger
). Вот полная разметка для элемента Setter
:
ToolTip="{Binding ElementName=controlWithError,
Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
Запустите приложение и создайте условие для возникновения ошибки. Результат будет подобен представленному на рис. 28.7.
Итоговые сведения о проверке достоверности
На этом исследование методов проверки достоверности в WPF завершено. Разумеется, с их помощью можно делать намного большее. За дополнительными сведениями обращайтесь в документацию по WPF.
Создание специальных команд