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).

<p id="AutBody_Root1284"><strong>Настройка свойства ErrorTemplate</strong></p>

Финальной темой является создание стиля, который будет применяться, когда элемент управления содержит ошибку, а также обновление 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. Разметка выглядит следующим образом:

 

Запустите приложение и создайте условие для ошибки. Результат будет подобен тому, что показан на рис. 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.

<p id="AutBody_Root1285"><strong>Итоговые сведения о проверке достоверности</strong></p>

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

<p id="AutBody_Root1286"><strong>Создание специальных команд</strong></p>
Перейти на страницу:

Похожие книги