Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

public string this[string columnName]

{

get

{

ClearErrors(columnName);

var errorsFromAnnotations =

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
. Разметка выглядит следующим образом:

<Window.Resources>

<Style TargetType="{x:Type TextBox}">

<Style.Triggers>

<Trigger Property="Validation.HasError" Value="true">

<Setter Property="Background" Value="Pink" />

<Setter Property="Foreground" Value="Black" />

<Setter Property="ToolTip"

Value="{Binding RelativeSource={RelativeSource Self},

Path=(Validation.Errors)[0].ErrorContent}"/>

</Trigger>

</Style.Triggers>

</Style>

</Window.Resources>

Запустите приложение и создайте условие для ошибки. Результат будет подобен тому, что показан на рис. 28.6, и укомплектован всплывающей подсказкой с сообщением об ошибке.

Определенный

выше стиль изменяет внешний вид любого элемента управления
TextBox
, который содержит ошибку. Далее мы создадим специальный шаблон элемента управления с целью обновления свойства
ErrorTemplate
класса
Validation
, чтобы отобразить восклицательный знак красного цвета и установить всплывающие подсказки для восклицательного знака. Шаблон
ErrorTemplate
является декоратором, который располагается поверх элемента управления. Хотя только что созданный стиль обновляет сам элемент управления, шаблон
ErrorTemplate
будет размещаться поверх элемента управления.

Поместите элемент

Setter
непосредственно после закрывающего дескриптора
Style.Triggers
внутри созданного стиля. Вы будете создавать шаблон элемента управления, состоящий из элемента
TextBlock
(для отображения восклицательного знака) и элемента
BorderBrush
, который окружает
TextBox
, содержащий сообщение об ошибке (или несколько сообщений). В языке XAML предусмотрен специальный дескриптор для элемента управления, декорированного с помощью
ErrorTemplate
, под названием
AdornedElementPlaceholder
. Добавляя имя такого элемента управления, можно получить доступ к ошибкам, которые ассоциированы с элементом управления. В рассматриваемом примере вас интересует доступ к свойству
Validation.Errors
с целью получения
ErrorContent
(как делалось в
Style.Trigger
). Вот полная разметка для элемента
Setter
:

<Setter Property="Validation.ErrorTemplate">

<Setter.Value>

<ControlTemplate>

<DockPanel LastChildFill="True">

<TextBlock Foreground="Red" FontSize="20" Text="!"

ToolTip="{Binding ElementName=controlWithError,

Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>

<Border BorderBrush="Red" BorderThickness="1">

<AdornedElementPlaceholder Name="controlWithError" />

</Border>

</DockPanel>

</ControlTemplate>

</Setter.Value>

</Setter>

Запустите приложение и создайте условие для возникновения ошибки. Результат будет подобен представленному на рис. 28.7.

Итоговые сведения о проверке достоверности

На этом исследование методов проверки достоверности в WPF завершено. Разумеется, с их помощью можно делать намного большее. За дополнительными сведениями обращайтесь в документацию по WPF.

Создание специальных команд

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

WpfCommands
. В случае работы с проектом из предыдущего раздела обращайте внимание на пространства имен в примерах кода и корректируйте их по мере необходимости.

В главе 25 объяснялось, что команды являются неотъемлемой частью WPF. Команды могут привязываться к элементам управления WPF (таким как

Button
и
MenuItem
) для обработки пользовательских событий, подобных щелчку. Вместо создания обработчика события напрямую и помещения его кода в файл отделенного кода при возникновении события выполняется метод
Execute
команды. Метод
CanExecute
используется для включения или отключения элемента управления на основе специального кода. В дополнение к встроенным командам, которые применялись в главе 25, можно создавать собственные команды, реализуя интерфейс
ICommand
. Когда вместо обработчиков событий используются команды, появляются преимущества инкапсуляции кода приложения, а также автоматического включения и отключения элементов управления с помощью бизнес-логики.

Поделиться:
Популярные книги

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

Хозяйка Проклятой Пустоши. Книга 2

Белецкая Наталья
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Потусторонний. Книга 2

Погуляй Юрий Александрович
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Потусторонний. Книга 2

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5