Сегодня Вы узнаете, как устроены окна операционной системы Windows 7.
Всё чтобы мы ни делали на компьютере, мы делаем это в отдельных окнах. Для того, чтобы напечатать текст, нам нужен текстовый редактор, который имеет свое окно, где мы набираем и редактируем текст. Хотим посмотреть фотографию, щелкаем по ней дважды и она открывается в отдельном окне.
Примеры можно приводить до бесконечности, главное понять, что каждая программа работает в своем окне и в другие не суется. Поэтому, содержимое дисков, файлов и папок будет показано нам в окнах. Собственно отсюда и название операционной системы – Windows (с англ. окна).
Ниже показано стандартное окно проводника Windows 7.
Нажмите для увеличения!
В самом верху располагается «панель для перемещения» (голубенькая область сверху), нажав на нее левой кнопкой мыши и не отпуская ее, можно передвигать окно.
В правой части этой панели расположены три «кнопки управления окном»:
1. Свернуть – сворачивает окно в панель задач.
2. Развернуть – разворачивает окно на весь экран. Если окно уже развернуто, то эта же кнопка сворачивает его в более компактный вид.
3. Закрыть – закрывает окно.
Ниже у нас находятся:
«Кнопки перемещения» – позволяют перемещаться назад и вперед, т.е. возвращаться к предыдущим папкам.
«Адресная строка» – показывает наше месторасположение.
«Поиск» – помогает быстро найти папку или файл по названию, причем ищет именно в той папке, где Вы находитесь.
Далее у нас идет «панель инструментов», с помощью нее можно настроить внешний вид папок, создать папку и д.т.
В основной области расположено само содержимое, т.е. файлы и папки.
Левее основной области расположена панель для быстрого перехода – позволяет быстро перемещаться между основными папками и локальными дисками.
Самую нижнюю область занимает строка состояния – стоит выделить какой-либо файл (или группу файлов), и здесь будет отображаться основная информация о нем.
Диалоговое окно!
Очень часто Вам будет встречаться и другой тип окон, диалоговые окна. Они предназначены исключительно для “общения” с компьютером!
Диалоговое окно
Обычно в таких окнах Вам нужно что-либо указать или выбрать, т.е. объяснить компьютеру, что Вы от него хотите.
Если Вы считаете эту информацию полезной то, пожалуйста поделитесь ей с друзьями в социальных сетях! При возникновении вопросов, обязательно задавайте их в комментариях!
Диалоговые окна и всплывающие элементы Dialogs and flyouts
Диалоговые окна и всплывающие элементы используются для временного отображения элементов пользовательского интерфейса, если происходит нечто, требующее уведомления, подтверждения или дополнительных сведений от пользователя. Dialogs and flyouts are transient UI elements that appear when something happens that requires notification, approval, or additional information from the user.
ДиалогиDialogs
Диалоговые окна — это модальные наложения пользовательского интерфейса, которые предоставляют контекстную информацию о приложении. Dialogs are modal UI overlays that provide contextual app information. Диалоговые окна блокируют взаимодействие с окном приложения, пока пользователь явно не закроет окно. Dialogs block interactions with the app window until being explicitly dismissed. Они часто требуют от пользователя совершения каких-либо действий. They often request some kind of action from the user.
Всплывающие элементыFlyouts
Всплывающий элемент — это облегченное всплывающее контекстно-зависимое окно, отображающее элемент пользовательского интерфейса в зависимости от действий пользователя. A flyout is a lightweight contextual popup that displays UI related to what the user is doing. Он включает логику расположения и размеров и может использоваться для отображения дополнительного элемента управления или отображения дополнительных сведений об элементе. It includes placement and sizing logic, and can be used to reveal a secondary control or show more detail about an item.
В отличие от диалогового окна, всплывающий элемент можно быстро закрыть нажатием или щелчком за его пределами, нажатием клавиши Escape или кнопки «Назад», изменением размера окна приложения или ориентации устройства. Unlike a dialog, a flyout can be quickly dismissed by tapping or clicking somewhere outside the flyout, pressing the Escape key or Back button, resizing the app window, or changing the device’s orientation.
Выбор правильного элемента управления Is this the right control?
Диалоговые окна и всплывающие элементы позволяют пользователям быть в курсе важной информации, но также мешают взаимодействию с пользователем. Dialogs and flyouts make sure that users are aware of important information, but they also disrupt the user experience. Так как диалоговые окна модальны (приводят к блокировке), они прерывают работу пользователей и мешают им выполнять дальнейшие действия, пока не произойдет взаимодействие с диалоговым окном. Because dialogs are modal (blocking), they interrupt users, preventing them from doing anything else until they interact with the dialog. Всплывающие элементы в меньшей степени мешают взаимодействию с пользователем, но отображение слишком большого числа всплывающих элементов может отвлекать. Flyouts provide a less jarring experience, but displaying too many flyouts can be distracting.
Определив, собираетесь ли вы использовать диалоговое окно или всплывающий элемент, необходимо выбрать один из этих вариантов. Once you’ve determined that you want to use a dialog or flyout, you need to choose which one to use.
Учитывая то, что, в отличие от всплывающих элементов, диалоговые окна блокируют взаимодействие, последние следует использовать в тех случаях, когда пользователь должен уделить все внимание определенной информации или ответить на вопрос. Given that dialogs block interactions and flyouts do not, dialogs should be reserved for situations where you want the user to drop everything to focus on a specific bit of information or answer a question. С другой стороны, всплывающие элементы можно использовать для привлечения внимания к определенной информации, которую пользователь вполне может проигнорировать. Flyouts, on the other hand, can be used when you want to call attention to something, but it’s ok if the user wants to ignore it.
Используйте диалоговое окно в следующих целях.Use a dialog for.
Чтобы сообщить важную информацию, которую пользователь должен прочитать и осознать перед продолжением работы. Expressing important information that the user must read and acknowledge before proceeding. Примеры приведены ниже: Examples include:
угроза безопасности пользователя; When the user’s security might be compromised
намерение изменить ценные данные без возможности отмены действия; When the user is about to permanently alter a valuable asset
намерение удалить ценные данные; When the user is about to delete a valuable asset
подтверждение покупки из приложения; To confirm an in-app purchase
Сообщения об ошибках, которые относятся к приложению в целом, например ошибка подключения. Error messages that apply to the overall app context, such as a connectivity error.
Вопросы, если приложению нужно задать пользователю блокирующий вопрос, например, если приложение не может сделать выбор от имени пользователя. Questions, when the app needs to ask the user a blocking question, such as when the app can’t choose on the user’s behalf. Блокирующий вопрос нельзя проигнорировать или отложить. У пользователя должны быть понятные варианты выбора. A blocking question can’t be ignored or postponed, and should offer the user well-defined choices.
Используйте всплывающий элемент в следующих целях.Use a flyout for.
сбор дополнительных сведений для завершения действия; Collecting additional information needed before an action can be completed.
Отображение временно актуальных сведений. Displaying info that’s only relevant some of the time. например, когда пользователь щелкает эскиз изображения в приложении фотоальбома, можно использовать всплывающий элемент для отображения увеличенного варианта этого изображения; For example, in a photo gallery app, when the user clicks an image thumbnail, you might use a flyout to display a large version of the image.
отображение дополнительной информации, например подробных сведений или более длинных описаний элемента на странице. Displaying more information, such as details or longer descriptions of an item on the page.
Как избавиться от ненужных диалоговых окон и всплывающих элементов Ways to avoid using dialogs and flyouts
Учитывайте важность информации, которую требуется отобразить: важна ли она настолько, чтобы прерывать пользователя? Consider the importance of the information you want to share: is it important enough to interrupt the user? Также учтите частоту отображения информации. Если диалоговое окно или уведомление отображается каждые несколько минут, возможно, следует выделить для этой информации место в основном пользовательском интерфейсе. Also consider how frequently the information needs to be shown; if you’re showing a dialog or notification every few minutes, you might want to allocate space for this info in the primary UI instead. Возьмем, к примеру, клиент чата. Вместо того чтобы отображать всплывающий элемент каждый раз, когда друг выполняет вход, можно отображать список друзей, находящихся на данный момент в сети, и выделять друзей, выполняющих вход. For example, in a chat client, rather than showing a flyout every time a friend logs in, you might display a list of friends who are online at the moment and highlight friends as they log on.
Диалоговые окна часто используются для подтверждения действия (например, удаления файла) перед его выполнением. Dialogs are frequently used to confirm an action (such as deleting a file) before executing it. Если ожидается, что пользователь будет часто выполнять определенное действие, вы можете предоставить пользователю возможность отменить ошибочное действие, чем запрашивать его подтверждение каждый раз. If you expect the user to perform a particular action frequently, consider providing a way for the user to undo the action if it was a mistake, rather than forcing users to confirm the action every time.
Как создать диалоговое окно How to create a dialog
Как создать всплывающий элемент How to create a flyout
Примеры Examples
XAML Controls Gallery XAML Controls Gallery
Если у вас установлено приложение XAML Controls Gallery, щелкните здесь, чтобы открыть его и увидеть ContentDialog или Flyout в действии. If you have the XAML Controls Gallery app installed, click here to open the app and see the ContentDialog or Flyout in action.
Общие сведения о диалоговых окнах Dialog boxes overview
Изолированные приложения обычно имеют главное окно, в котором отображаются основные данные, по которым приложение работает, и предоставляет функциональные возможности для обработки этих данных с помощью пользовательский интерфейс user interface (UI) таких механизмов, как строки меню, панели инструментов и строки состояния. Standalone applications typically have a main window that both displays the main data over which the application operates and exposes the functionality to process that data through пользовательский интерфейс user interface (UI) mechanisms like menu bars, tool bars, and status bars. Нетривиальное приложение может также отображать дополнительные окна для следующих целей: A non-trivial application may also display additional windows to do the following:
отображения определенных сведений для пользователей; Display specific information to users.
сбора сведений от пользователей; Gather information from users.
сбора и отображения сведений. Both display and gather information.
Эти типы окон называются диалоговыми окнами, и существует два типа: модальные и немодальные. These types of windows are known as dialog boxes, and there are two types: modal and modeless.
Модальное диалоговое окно отображается функцией, когда для продолжения работы функции требуются дополнительные данные от пользователя. A modal dialog box is displayed by a function when the function needs additional data from a user to continue. Поскольку функция зависит от модального диалогового окна для сбора данных, это окно также не разрешает пользователю активизировать другие окна в приложении, пока остается открытым. Because the function depends on the modal dialog box to gather data, the modal dialog box also prevents a user from activating other windows in the application while it remains open. В большинстве случаев модальное диалоговое окно позволяет пользователю подать сигнал о завершении работы с модальным диалоговым окном, нажав кнопку ОК или Отмена . In most cases, a modal dialog box allows a user to signal when they have finished with the modal dialog box by pressing either an OK or Cancel button. Нажатие кнопки ОК означает, что пользователь вводит данные и желает, чтобы функция продолжала обрабатывать эти данные. Pressing the OK button indicates that a user has entered data and wants the function to continue processing with that data. Нажатие кнопки Отмена означает, что пользователь хочет остановить выполнение функции. Pressing the Cancel button indicates that a user wants to stop the function from executing altogether. Наиболее распространенными примерами модальных диалоговых окон являются окна, которые отображаются для открытия, сохранения и печати данных. The most common examples of modal dialog boxes are shown to open, save, and print data.
Немодальное диалоговое окно, с другой стороны, не мешает пользователю активировать другие окна, пока оно открыто. A modeless dialog box, on the other hand, does not prevent a user from activating other windows while it is open. Например, если пользователь хочет найти вхождения конкретного слова в документе, главное окно часто открывает диалоговое окно с запросом слова для поиска. For example, if a user wants to find occurrences of a particular word in a document, a main window will often open a dialog box to ask a user what word they are looking for. Так как поиск слова не мешает пользователю редактировать документ, диалоговое окно не обязательно должно быть модальным. Since finding a word doesn’t prevent a user from editing the document, however, the dialog box doesn’t need to be modal. Немодальное диалоговое окно, по крайней мере, содержит кнопку Закрыть для закрытия диалогового окна и может предоставлять дополнительные кнопки для выполнения конкретных функций, таких как кнопка Найти далее , чтобы найти следующее слово, совпадающее с критерием поиска слова. A modeless dialog box at least provides a Close button to close the dialog box, and may provide additional buttons to execute specific functions, such as a Find Next button to find the next word that matches the find criteria of a word search.
Windows Presentation Foundation (WPF) позволяет создавать несколько типов диалоговых окон, включая окна сообщений, общие диалоговые окна и пользовательские диалоговые окна. Windows Presentation Foundation (WPF) allows you to create several types of dialog boxes, including message boxes, common dialog boxes, and custom dialog boxes. В этом разделе обсуждаются все, а в образце диалогового окна приведены соответствующие примеры. This topic discusses each, and the Dialog Box Sample provides matching examples.
Окна сообщений Message boxes
Окно сообщения является диалоговым, которое можно использовать для вывода текстовой информации и разрешения пользователям принимать решения с помощью кнопок. A message box is a dialog box that can be used to display textual information and to allow users to make decisions with buttons. На следующем рисунке показано окно сообщения, в котором отображается текстовая информация, задается вопрос и предоставляются три кнопки для ответа на этот вопрос. The following figure shows a message box that displays textual information, asks a question, and provides the user with three buttons to answer the question.
Чтобы создать окно сообщения, используйте MessageBox класс. To create a message box, you use the MessageBox class. MessageBox позволяет настроить текст, заголовок, значок и кнопки в окне сообщения, используя код, подобный приведенному ниже. MessageBox lets you configure the message box text, title, icon, and buttons, using code like the following.
Чтобы отобразить окно сообщения, вызовите static Show метод, как показано в следующем коде. To show a message box, you call the static Show method, as demonstrated in the following code.
Когда коду, который показывает окно сообщения, нужно определить и обработать решение пользователя (какая кнопка была нажата), он может проверить результат окна сообщения, как показано в следующем коде. When code that shows a message box needs to detect and process the user’s decision (which button was pressed), the code can inspect the message box result, as shown in the following code.
Дополнительные сведения об использовании окон сообщений см. в разделе MessageBox , образец MessageBoxи Образец диалогового окна. For more information on using message boxes, see MessageBox, MessageBox Sample, and Dialog Box Sample.
Хотя MessageBox может предложить простое взаимодействие с пользователем диалогового окна, преимущество использования MessageBox — это единственный тип окна, который может быть отображен приложениями, выполняемыми в песочнице безопасности частичного доверия (см. раздел Безопасность), например в приложениях браузера XAML (XBAP). Although MessageBox may offer a simple dialog box user experience, the advantage of using MessageBox is that is the only type of window that can be shown by applications that run within a partial trust security sandbox (see Security), such as XAML browser applications (XBAPs).
Большинство диалоговых окон отображают и собирают более сложные данные, чем результат окна сообщения, в том числе текст, выбранные варианты (флажки), взаимоисключающий выбор (переключатели) и списки выбора (списки, поля со списком, поля с раскрывающимся списком). Most dialog boxes display and gather more complex data than the result of a message box, including text, selection (check boxes), mutually exclusive selection (radio buttons), and list selection (list boxes, combo boxes, drop-down list boxes). Для этого Windows Presentation Foundation (WPF) предоставляет несколько общих диалоговых окон и позволяет создавать собственные диалоговые окна, хотя использование либо ограничено приложениями, работающими с полным доверием. For these, Windows Presentation Foundation (WPF) provides several common dialog boxes and allows you to create your own dialog boxes, although the use of either is limited to applications running with full trust.
Общие диалоговые окна Common dialog boxes
В Windows реализовано множество многократно используемых диалоговых окон, которые являются общими для всех приложений, включая диалоговые окна для открытия файлов, сохранения файлов и печати. Windows implements a variety of reusable dialog boxes that are common to all applications, including dialog boxes for opening files, saving files, and printing. Поскольку эти диалоговые окна реализованы операционной системой, они могут совместно использоваться всеми приложениями, работающими в операционной системе, что помогает поддерживать единообразие пользовательского интерфейса; если пользователи знакомы с диалоговым окном, предоставляемым операционной системой в одном приложении, им не нужно учиться пользоваться этим диалоговым окном в других приложениях. Since these dialog boxes are implemented by the operating system, they can be shared among all the applications that run on the operating system, which helps user experience consistency; when users are familiar with the use of an operating system-provided dialog box in one application, they don’t need to learn how to use that dialog box in other applications. Поскольку эти диалоговые окна доступны для всех приложений, и они помогают обеспечить единообразное взаимодействие с пользователем, они называются общими диалоговыми окнами. Because these dialog boxes are available to all applications and because they help provide a consistent user experience, they are known as common dialog boxes.
Windows Presentation Foundation (WPF) инкапсулирует общие диалоговые окна открытия файла, сохранения файлов и печати и предоставляет их в качестве управляемых классов для использования в автономных приложениях. Windows Presentation Foundation (WPF) encapsulates the open file, save file, and print common dialog boxes and exposes them as managed classes for you to use in standalone applications. В этом разделе приводится краткий обзор каждого типа диалоговых окон. This topic provides a brief overview of each.
Диалоговое окно открытия файла Open File dialog
Диалоговое окно открытия файлов, показанное на следующем рисунке, используется функциональностью открытия файла для получения имени открываемого файла. The open file dialog box, shown in the following figure, is used by file opening functionality to retrieve the name of a file to open.
Общее диалоговое окно открытия файла реализуется как OpenFileDialog класс и находится в Microsoft.Win32 пространстве имен. The common open file dialog box is implemented as the OpenFileDialog class and is located in the Microsoft.Win32 namespace. Следующий код показывает, как создавать, настраивать и отображать такое окно, а также как обрабатывать результат. The following code shows how to create, configure, and show one, and how to process the result.
Дополнительные сведения о диалоговом окне Открытие файла см. в разделе Microsoft.Win32.OpenFileDialog . For more information on the open file dialog box, see Microsoft.Win32.OpenFileDialog.
OpenFileDialog может использоваться для безопасного извлечения имен файлов приложениями, работающими с частичным доверием (см. раздел Безопасность). OpenFileDialog can be used to safely retrieve file names by applications running with partial trust (see Security).
диалоговое окно сохранения файлов Save File dialog box
Диалоговое окно сохранения файлов, показанное на следующем рисунке, используется функциональностью сохранения файла для получения имени сохраняемого файла. The save file dialog box, shown in the following figure, is used by file saving functionality to retrieve the name of a file to save.
Диалоговое окно «Общие файлы сохранения» реализуется как SaveFileDialog класс и находится в Microsoft.Win32 пространстве имен. The common save file dialog box is implemented as the SaveFileDialog class, and is located in the Microsoft.Win32 namespace. Следующий код показывает, как создавать, настраивать и отображать такое окно, а также как обрабатывать результат. The following code shows how to create, configure, and show one, and how to process the result.
Дополнительные сведения о диалоговом окне Сохранение файла см. в разделе Microsoft.Win32.SaveFileDialog . For more information on the save file dialog box, see Microsoft.Win32.SaveFileDialog.
Печать — диалоговое окно Print dialog box
Диалоговое окно печати, показанное на следующем рисунке, используется функциональными возможностями печати для выбора и настройки принтера, на котором пользователь хочет печатать данные. The print dialog box, shown in the following figure, is used by printing functionality to choose and configure the printer that a user would like to print data to.
Общее диалоговое окно печати реализуется как PrintDialog класс и находится в System.Windows.Controls пространстве имен. The common print dialog box is implemented as the PrintDialog class, and is located in the System.Windows.Controls namespace. Следующий код показывает, как создавать, настраивать и отображать такое окно. The following code shows how to create, configure, and show one.
Дополнительные сведения о диалоговом окне Печать см. в разделе System.Windows.Controls.PrintDialog . For more information on the print dialog box, see System.Windows.Controls.PrintDialog. Подробное описание печати в WPF см. в разделе Общие сведения о печати. For detailed discussion of printing in WPF, see Printing Overview.
Настраиваемые диалоговые окна Custom dialog boxes
Хотя общие диалоговые окна полезны и должны использоваться, когда это возможно, они не поддерживают требований диалоговых окон отдельного домена. While common dialog boxes are useful, and should be used when possible, they do not support the requirements of domain-specific dialog boxes. В этих случаях необходимо создавать собственные диалоговые окна. In these cases, you need to create your own dialog boxes. Как мы увидим, диалоговое окно является окном со специальным поведением. As we’ll see, a dialog box is a window with special behaviors. Window реализует эти поведения и, следовательно, используется Window для создания настраиваемых модальных и немодальных диалоговых окон. Window implements those behaviors and, consequently, you use Window to create custom modal and modeless dialog boxes.
Создание модального настраиваемого диалогового окна Creating a modal custom dialog box
В этом разделе показано, как использовать Window для создания типичной реализации модального диалогового окна с помощью Margins диалогового окна в качестве примера (см. Пример диалогового окна). This topic shows how to use Window to create a typical modal dialog box implementation, using the Margins dialog box as an example (see Dialog Box Sample). Это Margins диалоговое окно показано на следующем рисунке. The Margins dialog box is shown in the following figure.
Настройка модального диалогового окна Configuring a modal dialog box
Пользовательский интерфейс для типичного диалогового окна включает следующее. The user interface for a typical dialog box includes the following:
Различные элементы управления, которые необходимы для сбора нужных данных. The various controls that are required to gather the desired data.
Кнопка ОК , которую пользователь нажимаем, чтобы закрыть диалоговое окно, вернуться к функции и продолжить обработку. An OK button that users click to close the dialog box, return to the function, and continue processing.
Кнопка «Отмена» , которую пользователь нажмет для закрытия диалогового окна и прекращения дальнейшей обработки функции. A Cancel button that users click to close the dialog box and stop the function from further processing.
Кнопка Закрыть в заголовке окна. A Close button in the title bar.
Кнопки сворачивания, развертывания и восстановления . Minimize, Maximize, and Restore buttons.
Системное меню для сворачивания, развертывания, восстановления и закрытия диалогового окна. A System menu to minimize, maximize, restore, and close the dialog box.
Расположение выше и в центре окна, открывшего диалоговое окно. A position above and in the center of the window that opened the dialog box.
Возможность изменять размер, если это возможно, чтобы не допустить слишком маленького диалогового окна, а также предоставить пользователю полезный размер по умолчанию. The ability to be resized where possible to prevent the dialog box from being too small, and to provide the user with a useful default size. Для этого необходимо задать значения по умолчанию и минимальные размеры. This requires that you set both the default and a minimum dimensions.
Клавиша ESC в качестве сочетания клавиш, которое вызывает нажатие кнопки Отмена . The ESC key as a keyboard shortcut that causes the Cancel button to be pressed. Это можно сделать, задав IsCancel для свойства кнопки Отмена значение true . You do this by setting the IsCancel property of the Cancel button to true .
Клавиша ВВОД (или возврата) в качестве сочетания клавиш, которое вызывает нажатие кнопки ОК . The ENTER (or RETURN) key as a keyboard shortcut that causes the OK button to be pressed. Для этого нужно задать IsDefault свойство кнопки ОК true . You do this by setting the IsDefault property of the OK button true .
Следующий код демонстрирует такую конфигурацию. The following code demonstrates this configuration.
Пользовательский интерфейс для диалогового окна также распространяется в строку меню окна, открывающего диалоговое окно. The user experience for a dialog box also extends into the menu bar of the window that opens the dialog box. Если пункт меню вызывает функцию, которая перед продолжением выполнения требует взаимодействия с пользователем посредством диалогового окна, то в названии этого пункта меню будет многоточие в заголовке, как показано ниже. When a menu item runs a function that requires user interaction through a dialog box before the function can continue, the menu item for the function will have an ellipsis in its header, as shown here.
Если пункт меню вызывает функцию, которая отображает диалоговое окно, не требующее взаимодействия с пользователем, например диалоговое окно «О программе», многоточие не требуется. When a menu item runs a function that displays a dialog box which does not require user interaction, such as an About dialog box, an ellipsis is not required.
Открытие модального диалогового окна Opening a modal dialog box
Диалоговое окно обычно отображается в результате выбора пользователем пункта меню для выполнения доменной функции, такой как установка полей документа в текстовом процессоре. A dialog box is typically shown as a result of a user selecting a menu item to perform a domain-specific function, such as setting the margins of a document in a word processor. Отображение диалогового окна похоже на отображение обычного окна, хотя требуется дополнительная настройка для диалогового окна. Showing a window as a dialog box is similar to showing a normal window, although it requires additional dialog box-specific configuration. Весь процесс создания, настройки и открытия диалогового окна показан в следующем коде. The entire process of instantiating, configuring, and opening a dialog box is shown in the following code.
Здесь код передает в диалоговое окно сведения по умолчанию (текущие поля). Here, the code passes default information (the current margins) to the dialog box. Он также задает Window.Owner свойство со ссылкой на окно, в котором отображается диалоговое окно. It also sets the Window.Owner property with a reference to the window that is showing the dialog box. В общем случае необходимо всегда задавать владельца для диалогового окна, чтобы обеспечить поведение окна, которое является общим для всех диалоговых окон (Дополнительные сведения см. в разделе Обзор Windows WPF ). In general, you should always set the owner for a dialog box to provide window state-related behaviors that are common to all dialog boxes (see WPF Windows Overview for more information).
Необходимо указать владельца для поддержки автоматизации ПОЛЬЗОВАТЕЛЬСКОГО интерфейса для диалоговых окон (см. Обзор модели автоматизации пользовательскогоинтерфейса). You must provide an owner to support user interface (UI) automation for dialog boxes (see UI Automation Overview).
После настройки диалогового окна он отображается как модальный путем вызова ShowDialog метода. After the dialog box is configured, it is shown modally by calling the ShowDialog method.
Проверка предоставленных пользователем данных Validating user-provided data
Если открывается диалоговое окно и пользователь предоставляет требуемые данные, диалоговое окно отвечает за проверку допустимости предоставленных данных по следующим причинам. When a dialog box is opened and the user provides the required data, a dialog box is responsible for ensuring that the provided data is valid for the following reasons:
С точки зрения безопасности следует проверять все входные данные. From a security perspective, all input should be validated.
С точки зрения конкретного домена проверка данных предотвращает обработку в коде ошибочных данных, которые могут вызывать исключения. From a domain-specific perspective, data validation prevents erroneous data from being processed by the code, which could potentially throw exceptions.
С точки зрения взаимодействия с пользователем диалоговое окно может помочь пользователям, показывая, какие введенные ими данные являются недопустимыми. From a user-experience perspective, a dialog box can help users by showing them which data they have entered is invalid.
С точки зрения производительности проверка данных в многоуровневом приложении может уменьшить количество циклов обработки между уровнями клиента и приложения, особенно в том случае, если в приложение входят веб-службы или серверные базы данных. From a performance perspective, data validation in a multi-tier application can reduce the number of round trips between the client and the application tiers, particularly when the application is composed of Web services or server-based databases.
Чтобы проверить привязанный элемент управления в WPF, необходимо определить правило проверки и связать его с привязкой. To validate a bound control in WPF, you need to define a validation rule and associate it with the binding. Правило проверки является пользовательским классом, производным от ValidationRule . A validation rule is a custom class that derives from ValidationRule. В следующем примере показано правило проверки, MarginValidationRule которое проверяет, что привязанное значение — Double и находится в указанном диапазоне. The following example shows a validation rule, MarginValidationRule , which checks that a bound value is a Double and is within a specified range.
В этом коде логика проверки правила проверки реализуется путем переопределения Validate метода, который проверяет данные и возвращает соответствующее значение ValidationResult . In this code, the validation logic of a validation rule is implemented by overriding the Validate method, which validates the data and returns an appropriate ValidationResult.
Чтобы сопоставить это правило проверки со связанным элементом управления, используется следующая разметка. To associate the validation rule with the bound control, you use the following markup.
После того как правило проверки будет связано, WPF автоматически применит его при входе данных в привязанный элемент управления. Once the validation rule is associated, WPF will automatically apply it when data is entered into the bound control. Если элемент управления содержит недопустимые данные, WPF отобразит красную рамку вокруг недопустимого элемента управления, как показано на следующем рисунке. When a control contains invalid data, WPF will display a red border around the invalid control, as shown in the following figure.
WPF не ограничивает доступ пользователя к недопустимому элементу управления до тех пор, пока не будут введены допустимые данные. WPF does not restrict a user to the invalid control until they have entered valid data. Это правильное поведение диалогового окна; пользователь должен иметь возможность свободно перемещаться по элементам управления в диалоговом окне, независимо от того, правильны ли введенные данные. This is good behavior for a dialog box; a user should be able to freely navigate the controls in a dialog box whether or not data is valid. Однако это означает, что пользователь может ввести недопустимые данные и нажать кнопку ОК . However, this means a user can enter invalid data and press the OK button. По этой причине код также должен проверять все элементы управления в диалоговом окне, когда нажата кнопка ОК , обрабатывая Click событие. For this reason, your code also needs to validate all controls in a dialog box when the OK button is pressed by handling the Click event.
Этот код перечисляет все объекты зависимостей в окне и, если они являются недопустимыми (возвращенные GetHasError , недопустимый элемент управления получает фокус, IsValid метод возвращает false , а окно считается недопустимым. This code enumerates all dependency objects on a window and, if any are invalid (as returned by GetHasError, the invalid control gets the focus, the IsValid method returns false , and the window is considered invalid.
Если диалоговое окно является допустимым, оно может быть безопасно закрыто и выполнен возврат. Once a dialog box is valid, it can safely close and return. В рамках процесса возврата необходимо возвращать результат в вызывающую функцию. As part of the return process, it needs to return a result to the calling function.
Установка результата модального диалогового окна Setting the modal dialog result
Открытие диалогового окна с помощью ShowDialog является фундаментальным методом, аналогичным вызову метода: код, открывший диалоговое окно с использованием ShowDialog Waits до ShowDialog возврата. Opening a dialog box using ShowDialog is fundamentally like calling a method: the code that opened the dialog box using ShowDialog waits until ShowDialog returns. При ShowDialog возврате код, вызвавший его, должен решить, следует ли продолжать обработку или прекратить обработку в зависимости от того, нажал ли пользователь кнопку ОК или кнопку Отмена . When ShowDialog returns, the code that called it needs to decide whether to continue processing or stop processing, based on whether the user pressed the OK button or the Cancel button. Чтобы упростить это решение, диалоговое окно должно вернуть выбор пользователя в качестве Boolean значения, возвращаемого ShowDialog методом. To facilitate this decision, the dialog box needs to return the user’s choice as a Boolean value that is returned from the ShowDialog method.
При нажатии кнопки ОК ShowDialog должен возвращаться true . When the OK button is clicked, ShowDialog should return true . Это достигается путем задания DialogResult Свойства диалогового окна при нажатии кнопки ОК . This is achieved by setting the DialogResult property of the dialog box when the OK button is clicked.
Обратите внимание, что установка DialogResult свойства также приводит к автоматическому закрытию окна, что позволяет устранить необходимость явного вызова Close . Note that setting the DialogResult property also causes the window to close automatically, which alleviates the need to explicitly call Close.
При нажатии кнопки Отмена ShowDialog должна возвращаться false , что также требует установки DialogResult Свойства. When the Cancel button is clicked, ShowDialog should return false , which also requires setting the DialogResult property.
Если IsCancel свойство кнопки имеет значение true и пользователь нажимает кнопку « Отмена » или клавишу ESC, автоматически устанавливается значение DialogResult false . When a button’s IsCancel property is set to true and the user presses either the Cancel button or the ESC key, DialogResult is automatically set to false . Следующая разметка действует аналогично предыдущему коду без необходимости в обработке Click события. The following markup has the same effect as the preceding code, without the need to handle the Click event.
Диалоговое окно автоматически возвращается, false когда пользователь нажимает кнопку Закрыть в строке заголовка или выбирает пункт меню Закрыть в системном меню. A dialog box automatically returns false when a user presses the Close button in the title bar or chooses the Close menu item from the System menu.
Обработка данных, возвращаемых из модального диалогового окна Processing data returned from a modal dialog box
Если параметр DialogResult задается в диалоговом окне, то функция, которая открыла ее, может получить результат диалогового окна, проверив DialogResult свойство при ShowDialog возврате. When DialogResult is set by a dialog box, the function that opened it can get the dialog box result by inspecting the DialogResult property when ShowDialog returns.
Если диалоговое окно имеет значение true , функция использует его в качестве подсказки для получения и обработки данных, предоставленных пользователем. If the dialog result is true , the function uses that as a cue to retrieve and process the data provided by the user.
После ShowDialog возврата диалоговое окно нельзя открыть повторно. After ShowDialog has returned, a dialog box cannot be reopened. Вместо этого придется создать новый экземпляр. Instead, you need to create a new instance.
Если результат диалога равен false , функция должна завершить обработку соответствующим образом. If the dialog result is false , the function should end processing appropriately.
Создание немодального настраиваемого диалогового окна Creating a modeless custom dialog box
Немодальное диалоговое окно, например диалоговое окно поиска, показанное на следующем рисунке, в основном имеет такой же внешний вид, как и модальное диалоговое окно. A modeless dialog box, such as the Find Dialog Box shown in the following figure, has the same fundamental appearance as the modal dialog box.
Однако поведение несколько отличается, как показано в следующих разделах. However, the behavior is slightly different, as described in the following sections.
Открытие немодального диалогового окна Opening a modeless dialog box
Немодальное диалоговое окно открывается путем вызова Show метода. A modeless dialog box is opened by calling the Show method.
В отличие от ShowDialog , функция Show возвращает значение немедленно. Unlike ShowDialog, Show returns immediately. Следовательно, вызывающее окно не может определить, когда немодальное диалоговое окно закрывается, и поэтому не знает, когда следует проверить результат диалогового окна или получить данные из диалогового окна для дальнейшей обработки. Consequently, the calling window cannot tell when the modeless dialog box is closed and, therefore, does not know when to check for a dialog box result or get data from the dialog box for further processing. Поэтому диалоговому окну необходимо создать альтернативный способ возврата данных в вызывающее окно для обработки. Instead, the dialog box needs to create an alternative way to return data to the calling window for processing.
Обработка данных, возвращенных из немодального диалогового окна Processing data returned from a modeless dialog box
В этом примере объект FindDialogBox может вернуть один или несколько результатов поиска в главное окно в зависимости от искомого текста без какой бы то ни было определенной частоты. In this example, the FindDialogBox may return one or more find results to the main window, depending on the text being searched for without any specific frequency. Как и в случае с модальным диалоговым окном, немодальное диалоговое окно может возвращать результаты с помощью свойств. As with a modal dialog box, a modeless dialog box can return results using properties. Однако окну, которому принадлежит данное диалоговое окно, нужно знать, когда следует проверять эти свойства. However, the window that owns the dialog box needs to know when to check those properties. Один из способов сделать это — реализовать для диалогового окна событие, которое возникает всякий раз, когда текст найден. One way to enable this is for the dialog box to implement an event that is raised whenever text is found. FindDialogBox реализует TextFoundEvent для этой цели, для которой сначала требуется делегат. FindDialogBox implements the TextFoundEvent for this purpose, which first requires a delegate.
С помощью TextFoundEventHandler делегата FindDialogBox реализует TextFoundEvent . Using the TextFoundEventHandler delegate, FindDialogBox implements the TextFoundEvent .
Следовательно, Find может вызвать событие при обнаружении результата поиска. Consequently, Find can raise the event when a search result is found.
Затем окну-владельцу нужно зарегистрировать и обработать это событие. The owner window then needs to register with and handle this event.
Закрытие немодального диалогового окна Closing a modeless dialog box
Поскольку DialogResult не нужно задавать, немодальное диалоговое окно можно закрыть с помощью механизмов, предоставляемых системой, включая следующие: Because DialogResult does not need to be set, a modeless dialog can be closed using system provide mechanisms, including the following:
Нажатие кнопки Закрыть в строке заголовка. Clicking the Close button in the title bar.
Нажатие клавиш ALT+F4. Pressing ALT+F4.
В меню система выберите пункт Закрыть . Choosing Close from the System menu.
Кроме того, код может вызывать Close при нажатии кнопки Закрыть . Alternatively, your code can call Close when the Close button is clicked.