Язык программирования C#9 и платформа .NET5
Запустите приложение и создайте условие для ошибки. Результат будет подобен тому, что показан на рис. 28.6, и укомплектован всплывающей подсказкой с сообщением об ошибке.
Определенный выше стиль изменяет внешний вид любого элемента управления
, который содержит ошибку. Далее мы создадим специальный шаблон элемента управления с целью обновления свойстваTextBoxклассаErrorTemplate, чтобы отобразить восклицательный знак красного цвета и установить всплывающие подсказки для восклицательного знака. ШаблонValidationявляется декоратором, который располагается поверх элемента управления. Хотя только что созданный стиль обновляет сам элемент управления, шаблонErrorTemplateбудет размещаться поверх элемента управления.ErrorTemplateПоместите элемент
непосредственно после закрывающего дескриптораSetterвнутри созданного стиля. Вы будете создавать шаблон элемента управления, состоящий из элементаStyle.Triggers(для отображения восклицательного знака) и элементаTextBlock, который окружаетBorderBrush, содержащий сообщение об ошибке (или несколько сообщений). В языке XAML предусмотрен специальный дескриптор для элемента управления, декорированного с помощьюTextBox, под названием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()используется для включения или отключения элемента управления на основе специального кода. В дополнение к встроенным командам, которые применялись в главе 25, можно создавать собственные команды, реализуя интерфейсCanExecute(). Когда вместо обработчиков событий используются команды, появляются преимущества инкапсуляции кода приложения, а также автоматического включения и отключения элементов управления с помощью бизнес-логики.ICommandРеализация интерфейса ICommand
Как было показано в главе 25, интерфейс
определен следующим образом:ICommandpublic interface ICommand{event EventHandler CanExecuteChanged;bool CanExecute(object parameter);void Execute(object parameter);}Добавление класса ChangeColorCommand
Обработчики событий для элементов управления
вы замените командами, начав с кнопки Change Color. Создайте в проекте новую папку по имениButton. Добавьте в нее новый файл классаCmds. Сделайте класс открытым и реализующим интерфейсChangeColorCornmand.cs. Добавьте приведенные ниже операторыICommand(первый может варьироваться в зависимости от того, создавался ли новый проект для данного примера):usingusing WpfCommands.Models;using System.Windows.Input;Код класса должен выглядеть примерно так:
public class ChangeColorCommand : ICommand{public bool CanExecute(object parameter){throw new NotImplementedException();

