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
Начните с добавления в раздел 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.
Создание специальных команд