Как создать подобный шаблон для ошибок? - PullRequest
4 голосов
/ 24 января 2012

Я видел на нескольких сайтах, где публикуют некоторые изображения своих приложений, используя стиль для ErrorTemplate, такой как:

enter image description here

Знаете, где я могу его найти?

Ответы [ 2 ]

5 голосов
/ 25 января 2012

Я только что взбил одну, немного повозился, но она работает в моем тестовом приложении WPF (с использованием .Net 4.0). Я действительно хотел что-то подобное для приложения, над которым я работаю, поэтому ваш вопрос был удобным предлогом для его создания. =) * * Тысяча одна

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

Всплывающее сообщение об ошибке закрывается, когда проверенный элемент управления теряет фокус, и появляется снова (если есть ошибка), когда снова получает фокус.

Вот скриншот: Screenshot

Вот суть кода: https://gist.github.com/1672789

Я открыт для любых комментариев или улучшений, которые кто-либо может предложить.

1 голос
/ 24 января 2012

Это очень похоже на Adorner .Идея состоит в том, чтобы нарисовать что-то выше / рядом с элементом управления, где он определен, на что также не влияют преобразования, применяемые к сцене.

Например, вы можете определить Adorner в Style вашего TextBox.

Примерно так (псевдокод):

<Style TargetType="{x:Type TextBox}">
     <Setter Property="Template">
                <Setter.Value>
                   <ControlTemplate TargetType="{x:Type ScrollViewer}">
                       ........
                       ........
                       <AdornerDecorator Grid.Column="0" Grid.Row="0">
                           .........
                           .........
                       </AdorenrDecorator>
                    </ControlTemplate>
                </Setter.Value>
     </Setter>
</Style>

Полный пример (для ScrollViewer, но идентичные идентификаторы) можно найти здесь

...