приложение, выберите один из автомобилей и введите в поле 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
) указывает на элемент управления, к которому применяется данный стиль, в этом случае
Запустите приложение и создайте условие для ошибки. Результат будет подобен тому, что показан на рис. 28.6, и укомплектован всплывающей подсказкой с сообщением об ошибке.
Определенный
выше стиль изменяет внешний вид любого элемента управления
TextBox
, который содержит ошибку. Далее мы создадим специальный шаблон элемента управления с целью обновления свойства
ErrorTemplate
класса
Validation
, чтобы отобразить восклицательный знак красного цвета и установить всплывающие подсказки для восклицательного знака. Шаблон
ErrorTemplate
является декоратором, который располагается поверх элемента управления. Хотя только что созданный стиль обновляет сам элемент управления, шаблон
ErrorTemplate
будет размещаться поверх элемента управления.
Поместите элемент
Setter
непосредственно после закрывающего дескриптора
Style.Triggers
внутри созданного стиля. Вы будете создавать шаблон элемента управления, состоящий из элемента
TextBlock
(для отображения восклицательного знака) и элемента
BorderBrush
, который окружает
TextBox
, содержащий сообщение об ошибке (или несколько сообщений). В языке XAML предусмотрен специальный дескриптор для элемента управления, декорированного с помощью
ErrorTemplate
, под названием
AdornedElementPlaceholder
. Добавляя имя такого элемента управления, можно получить доступ к ошибкам, которые ассоциированы с элементом управления. В рассматриваемом примере вас интересует доступ к свойству
Запустите приложение и создайте условие для возникновения ошибки. Результат будет подобен представленному на рис. 28.7.
Итоговые сведения о проверке достоверности
На этом исследование методов проверки достоверности в WPF завершено. Разумеется, с их помощью можно делать намного большее. За дополнительными сведениями обращайтесь в документацию по WPF.
Создание специальных команд
Как и в разделе, посвященном проверке достоверности, можете продолжить работу с тем же проектом или создать новый проект и скопировать в него весь код из предыдущего проекта. Вы создадите новый проект по имени
WpfCommands
. В случае работы с проектом из предыдущего раздела обращайте внимание на пространства имен в примерах кода и корректируйте их по мере необходимости.
В главе 25 объяснялось, что команды являются неотъемлемой частью WPF. Команды могут привязываться к элементам управления WPF (таким как
Button
и
MenuItem
) для обработки пользовательских событий, подобных щелчку. Вместо создания обработчика события напрямую и помещения его кода в файл отделенного кода при возникновении события выполняется метод
Execute
команды. Метод
CanExecute
используется для включения или отключения элемента управления на основе специального кода. В дополнение к встроенным командам, которые применялись в главе 25, можно создавать собственные команды, реализуя интерфейс
ICommand
. Когда вместо обработчиков событий используются команды, появляются преимущества инкапсуляции кода приложения, а также автоматического включения и отключения элементов управления с помощью бизнес-логики.