Как вывести сообщение wpf

Диалоговые окна

Часто при отображении окна как модального пользователю предлагается сделать какой-нибудь выбор. Код, отображающий окно, дожидается получения результата этого выбора и затем выполняет на его основании соответствующее действие. Такое проектное решение называется моделью диалогового окна, а само отображаемое модальное окно — диалоговым окном.

Этот шаблон проектирования легко корректировать за счет создания в диалоговом окне общедоступного свойства. Такое свойство может устанавливаться, когда пользователь сделал выбор в диалоговом окне. Далее диалоговое окно может закрываться, а отображавший его код — проверять установленное для свойства значение и на его основе определять, какое действие должно быть выполнено следующим. (Имейте в виду, что даже когда окно закрывается, объект окна и информация обо всех его элементах управления все равно существует до тех пор, пока ссылающаяся на него переменная не покинет область действия.)

К счастью, такая инфраструктура уже отчасти жестко закодирована в классе Window. У каждого окна имеется уже готовое свойство DialogResult, которое может принимать значение true, false или null. Обычно значение true означает, что пользователь выбрал продолжение операции (например, щелкнул на кнопке ОК), а значение false — что он отменил операцию.

Лучше всего, когда результаты диалогового окна возвращаются в вызывающий код в виде значения, возвращаемого методом ShowDialog(). Это позволяет создавать, отображать и анализировать результаты диалогового окна с помощью простого кода:

Использование свойства DialogResult не исключает возможности добавления в окно специальных свойств. Например, исключительно целесообразно использовать свойство DialogResult для информирования вызывающего кода о том, разрешено или отменено было действие, и для предоставления других важных деталей через специальные свойства. В случае обнаружения в свойстве DialogResult значения true вызывающий код далее может проверять эти другие свойства для извлечения необходимой ему информации.

Читайте также:  Как ветеринары чистят зубы собакам

Также существует один сокращенный путь. Вместо того чтобы устанавливать свойство DialogResult вручную после выполнения пользователем щелчка на кнопке, можно назначить кнопку принятия (установкой для свойства IsDefault значения true). Тогда щелчок на этой кнопке будет автоматически приводить к установке свойства DialogResult в true. Подобным образом также можно предусмотреть кнопку отмены (за счет установки значения true для свойства IsCancel), в результате чего щелчок на ней будет автоматически приводить к установке свойства DialogResult в Cancel.

Модель диалогового окна в WPF отличается от той, что предлагается в Windows Forms. Там кнопки не предоставляют свойства DialogResult, из-за чего создавать можно только кнопки по умолчанию и кнопки отмены. Свойство DialogResult может принимать только значения true, false и null (последнее устанавливается для него изначально). Вдобавок щелчок на кнопке не приводит к автоматическому закрытию окна — код, выполняющий эту операцию, необходимо писать отдельно.

Общие диалоговые окна

Операционная система Windows включает много встроенных диалоговых окон, доступ к которым можно получать через API-интерфейс Windows. Для некоторых из них WPF предоставляет классы-оболочки.

Существует веская причина того, что WPF не включает упаковщики для абсолютно всех API-интерфейсов Windows. Одной из задач WPF является отделение от Windows API для получения возможности использования в других средах (например, в браузере) или переноса на другие платформы. Также многие из встроенных диалоговых окон уже начинают устаревать и потому не должны применяться в современных приложениях. Вдобавок в версии Windows 7 предпочтение уже отдается использованию не диалоговых окон, а основанных на задачах панелей и навигации.

Наиболее приметным из этих классов является класс System.Windows.MessageBox, который предоставляет статический метод Show(). Этот код можно использовать для отображения стандартных окон сообщений Windows. Ниже показана наиболее распространенная перегруженная версия этого метода:

Перечисление MessageBoxButton позволяет выбирать кнопки, которые должны отображаться в окне сообщений. К числу доступных вариантов относятся OK, OKCancel, YesNo и YesNoCancel. (Менее удобный для пользователя вариант AbortRetrylgnore не поддерживается.) Перечисление MessageBoxImage позволяет выбирать пиктограмму для окна сообщения (Information, Exclamation, Error, Hand, Question, Stop и т.д.).

Для класса MessageBox в WPF предусмотрена специальная поддержка функций печати, подразумевающих использование класса PrintDialog, а также классов OpenFileDialog и SaveFileDialog в пространстве имен Microsoft.Win32.

Классы OpenFileDialog и SaveFileDialog получают дополнительные функциональные средства (часть из которых наследуются от класса FileDialog). Оба из них поддерживают строку фильтра, которая устанавливает разрешенные расширения файлов. Класс OpenFileDialog также предлагает свойства, которые позволяют проверять выбор пользователя (CheckFileExists) и предоставлять ему возможность выбирать сразу несколько файлов (Multiselect). Ниже показан пример кода, который отображает диалоговое окно OpenFileDialog и выбранные файлы в окне списка после закрытия этого диалогового окна:

Элементов, позволяющих выбирать цвета, указывать шрифт и просматривать папки, здесь нет (хотя при использовании классов System.Windows.Forms из .NET 2.0 они доступны).

В предыдущих версиях WPF классы диалоговых окон всегда отображали диалоговые окна в старом стиле Windows ХР. В WPF 4 они были обновлены и оснащены поддержкой Windows Vista и Windows 7. Это означает то, что при запуске приложения под управлением более новой версии Windows диалоговые окна будут автоматически отображаться в современном стиле.

Источник

Как вывести сообщение wpf

Элемент предназначен для вывода текстовой информации, для создания простых надписей:

Ключевым свойством здесь является свойство Text , которое задает текстовое содержимое. Причем в случае

данное свойство задается неявно.

С помощью таких свойств, как FontFamily, TextDecorations и др., мы можем настроить отображение текста. Однако мы можем задать и более сложное форматирование, например:

Элементы Run представляют куски обычного текста, для которых можно задать отдельное форматирование.

Для изменения параметров отображаемого текста данный элемент имеет такие свойства, как LineHeight , TextWrapping и TextAlignment .

Свойство LineHeight позволяет указывать высоту строк.

Свойство TextWrapping позволяет переносить текст при установке этого свойства TextWrapping=»Wrap» . По умолчанию это свойство имеет значение NoWrap , поэтому текст не переносится.

Свойство TextAlignment выравнивает текст по центру (значение Center), правому (Right) или левому краю (Left):

Для декорации текста используется свойство TextDecorations , например, если TextDecorations=»Underline» , то текст будет подчеркнут.

Если нам вдруг потребуется перенести текст на другую строку, то тогда мы можем использовать элемент LineBreak :

TextBox

Если TextBlock просто выводит статический текст, то этот элемент представляет поле для ввода текстовой информации.

Он также, как и TextBlock, имеет свойства TextWrapping , TextAlignment и TextDecorations .

С помощью свойства MaxLength можно задать предельное количество вводимых символов.

В коде C# мы можем обработать событие изменения текста:

По умолчанию, если вводимый текст превышает установленные границы поля, то текстовое поле растет, чтобы вместить весь текст. Но визуально это не очень хорошо выглядит. Поэтому, как и в случае с TextBlock, мы можем перенести непомещающийся текст на новую строку, установив свойство TextWrapping=»Wrap».

Чобы переводить по нажатию на клавишу Enter курсор на следующую строку, нам надо установить свойство AcceptsReturn=»True» .

Также мы можем добавить полю возможность создавать табуляцию с помощью клавиши Tab, установив свойство AcceptsTab=»True»

Для отображения полос прокрутки TextBox поддерживает свойства VerticalScrollBarVisibility и НоrizontalScrollBarVisibility :

Возможно, при создании приложения нам потребуется сделать текстовое поле недоступным для ввода (на время в зависимости от условий или вообще), тогда для этого нам надо установить свойство IsReadOnly=»True» .

Для выделения текста есть свойства SelectionStart , SelectionLength и SelectionText . Например, выделим программно текст по нажатию кнопки:

Обработчик нажатия кнопки:

Проверка орфографии

TextBox обладает встроенной поддержкой орфографии. Чтобы ее задействовать, надо установить свойство SpellCheck.IsEnabled=»True» . Кроме того, по умолчанию проверка орфографии распространяется только на английский язык, поэтому, если приложение заточено под другой язык, нам надо его явным образом указать через свойство Language :

Метка (Label)

Главной особенностью меток является поддержка мнемонических команд-клавиш быстрого доступа, которые передают фокус связанному элементу. Например,

Теперь, нажав на клавишу «п», мы переведем фокус на связанное текстовое поле. При вызове приложения подчеркивание не отображается, чтобы отображать подчеркивание, надо нажать на клавишу Alt. Тогда чтобы перевести фокус на связанное текстовое поле необходимо будет нажать сочетание Alt + «п». Если не предполагается использование клавиш быстрого доступа, то для вывода обычной текста вместо меток лучше использовать элемент TextBlock.

PasswordBox

Элемент предназначен для ввода парольной информации. По сути это тоже текстовое поле, только для ввода символов используется маска. Свойство PasswordChar устанавливает символ маски, отображаемый при вводе пароля. Если это свойство не задано, то по умолчанию для маски символа используется черная точка. Свойство Password устанавливает парольную строку, отображаемую по умолчанию при загрузке окна приложения.

RichTextBox

Для вывода текстового содержимого, насыщенного форматированием, графикой, предназначен RichTextBox. Можно даже сказать, что он выводит не просто текст, а документы с более сложным форматированием, чем обычный TextBox. Более подробно о нем, а также как на его основе создать простой текстовый редактор, мы поговорим в главе, посвященной документам.

Источник

Окно сообщения об ошибке для WinForms и WPF приложений


Приветствую!

В статье посвященной моему профайлеру для Entity Framework-a, я вкратце описал примененную мной форму для сообщения пользователю об исключительной ошибке в приложении. После оценки количества скачиваний примера кода, было решено выделить этот пример в отдельный проект, а также добавить поддержку WPF приложений.
Исходники библиотеки вместе с примерами опубликованы на CodePlex под свободной лицензией MIT: https://uiexceptionhandler.codeplex.com/

Подробности под катом.

Введение

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

Что получилось

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

При клике по кнопке «Error detail information» выводиться дополнительная информация об ошибке:

Кнопка Debug позволяет подключить отладчик Visual Studio.
Кнопка «Send to Developer» отправляет письмо на почту разработчику. В случае ошибки отправки сообщения, пользователю будет предложено самому отправить лог файл разработчику на почту.
Отправленное разработчику сообщение придет в таком виде:

Использование

1. Забрать последнюю версию кода https://uiexceptionhandler.codeplex.com/SourceControl/latest
2. Собрать в Release mode.
3. Из папки «UIExceptionHandlerLibs\Deploy» подключить в проект библиотеку UIExceptionHandlerWinForms.dll в случае WinForms приложения и UIExceptionHandlerWPF.dll в случае WPF приложения.
4. Инициализировать путем вызова статического метода с рядом параметров:

Как это работает

Статический метод UIException.Start подписывает метод HandleError на событие AppDomain.CurrentDomain.UnhandledException:

В качестве библиотеки для логгирования используется NLog. Для того чтобы избежать появления лишних xml файлов, вся конфигурация Nlog-а делается в коде:

Чтобы добиться максимальной простой интеграции в проект, я решил все используемые сборки объединить в одну библиотеку. Делается это при помощи приложения ILMerge, путем добавления скрипта в post-build событие:

Послесловие

Данное решение было написано для достаточно крупного проекта, применяется уже более 2-х лет, значительно улучшив процесс исправления ошибок, поскольку о каждом падении приложения узнаешь моментально, без дополнительной нотификации от пользователя.

Надеюсь это все будет кому-то полезно!
Всем спасибо за внимание!

Источник

Как реализовать всплывающее сообщение в приложении WPF

мы хотели бы использовать сообщения воздушного шара, как описано в UX Guide из Microsoft. Я нашел несколько примеров, которые используют собственный код из Windows Forms, но собственный код требует дескриптора компонента, который немного сложен для приложения WPF, поскольку он не следует той же концепции.

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

конкретный случай у меня есть форма с несколькими текстовыми полями, которые нуждаются в проверке ввода и уведомлении о возможных неправильных входных значениях — что-то, что кажется подходящим для сообщений воздушного шара.

есть ли коммерческий или открытый исходный элемент управления, построенный для этого случая использования в WPF, о котором я должен знать?

5 ответов

руководство UX указывает, что различия между воздушным шаром и наконечником инструмента:

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

воздушные шары имеют заголовок, текст и значок.

воздушные шары могут быть интерактивными, в то время как невозможно нажать на подсказку.

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

но если все, что вы делаете, это отображение уведомлений, вы можете использовать всплывающую подсказку. Вам не нужно возиться с декораторами; просто создайте шаблон управления для Всплывающая подсказка, которая выглядит так, как вы хотите, создайте ресурс всплывающей подсказки, который использует этот стиль, и установите целевой элемент управления ToolTip свойства это ToolTip . Используйте ToolTipService для управления отображением относительно цели размещения.

я пошел вперед и создал сайт CodePlex для этого, который включает в себя «всплывающие окна тостов» и управление «воздушными шарами помощи». Эти версии имеют больше возможностей, чем описано ниже. Код Проекта Plex.

вот мое решение для заголовка воздушного шара. Некоторые из вещей, которые я хотел, чтобы он сделал по-другому:

  • исчезают, когда мышь входит.
  • исчезают, когда мышь выходит и закрыть окно, когда непрозрачность достигает 0.
  • если мышь находится над окном, непрозрачность будет на 100% и близко нет.
  • высота окна воздушного шара динамическая.
  • используйте триггеры событий вместо таймеров.
  • расположите воздушный шар на левой или правой стороне элемента управления.

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

Я создал UserControl с простым значком «справка».

и добавил Это в код позади.

вот код XAML для окна воздушного шара, которое открывает UserControl.

и код за окном воздушного шара.

Я закончил тем, что поместил TextBlock в слой adorner:

Я также использовал подсказку, как показано в каждом примере WPF:

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

Я сделал предупреждающий шар для решения проблемы предупреждения Caps Lock в моем WPF-проекте.

Если вы хотите добавить это предупреждение о воздушном шаре в свой проект, выполните следующие действия:

добавьте новое окно в свой проект и дайте имя «WarningBalloon».
добавьте следующий код XAML в новое окно и добавьте значок предупреждения в папку изображений проекта.

введите следующий код за LoginForm.

в нашем приложении мы реализовали воздушные шары как простое окно WPF. Расположение окна ограничено некоторыми свойствами модели родительского элемента управления. Вот пример кода (где BalloonContainerWindow наследуется от Window):

Источник

Оцените статью