Литмир - Электронная Библиотека
A
A

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

Expander
.

На рис. 25.14 показана начальная компоновка; она также иллюстрирует возможности правописания в рамках инфраструктуры WPF.

Язык программирования C#9 и платформа .NET5 - _211.png

Чтобы приступить к построению интересующего пользовательского интерфейса, модифицируйте начальное определение XAML типа

Window
для использования дочернего элемента
DockPanel
вместо стандартного элемента управления
Grid
:

<Window x:Class="MyWordPad.MainWindow"

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

  xmlns:local="clr-namespace:MyWordPad"

    mc:Ignorable="d"

    Title="My Spell Checker" Height="450" Width="800">

  <! -- Эта панель устанавливает содержимое окна -->

  <DockPanel>

  </DockPanel>

</Window>

Построение системы меню

Системы меню в WPF представлены классом Menu, который поддерживает коллекцию объектов

MenuItem
. При построении системы меню в XAML каждый объект
MenuItem
можно заставить обрабатывать разнообразные события, наиболее примечательным из которых является
Click
, возникающее при выборе подэлемента конечным пользователем. В рассматриваемом примере создаются два пункта меню верхнего уровня (File (Файл) и Tools (Сервис); позже будет построено меню Edit (Правка)), которые содержат в себе подэлементы Exit (Выход) и Spelling Hints (Подсказки по правописанию) соответственно.

В дополнение к обработке события

Click
для каждого подэлемента необходимо также обработать события
MouseEnter
и
MouseExit
, которые применяются для установки текста в строке состояния. Добавьте в контекст элемента
DockPanel
следующую разметку:

<b>&lt;!-- Стыковать систему меню к верхней части —&gt;</b>

&lt;Menu DockPanel.Dock =&quot;Top&quot;

    HorizontalAlignment=&quot;Left&quot; Background=&quot;White&quot; BorderBrush =&quot;Black&quot;&gt;

  &lt;MenuItem Header=&quot;_File&quot;&gt;

  &lt;Separator/&gt;

    &lt;MenuItem Header =&quot;_Exit&quot; MouseEnter =&quot;MouseEnterExitArea&quot;

        MouseLeave =&quot;MouseLeaveArea&quot; Click =&quot;FileExit_Click&quot;/&gt;

    &lt;/MenuItem&gt;

    &lt;MenuItem Header=&quot;_Tools&quot;&gt;

      &lt;MenuItem Header =&quot;_Spelling Hints&quot;

        MouseEnter =&quot;MouseEnterToolsHintsArea&quot;

        MouseLeave =&quot;MouseLeaveArea&quot; Click =&quot;ToolsSpellingHints_Click&quot;/&gt;

  &lt;/MenuItem&gt;

&lt;/Menu&gt;

Обратите внимание, что система меню стыкована с верхней частью

DockPanel
. Кроме того, элемент
Separator
применяется для добавления в систему меню тонкой горизонтальной линии прямо перед пунктом
Exit
. Значения
Header
для каждого
MenuItem
содержат символ подчеркивания (например,
_Exit
). Подобным образом указывается символ, который будет подчеркиваться, когда конечный пользователь нажмет клавишу <Alt> (для ввода клавиатурного сокращения). Символ подчеркивания используется вместо символа
&amp;
в Windows Forms, т.к. язык XAML основан на XML, а символ
&amp;
в XML имеет особый смысл.

После построения системы меню необходимо реализовать различные обработчики событий. Прежде всего, есть обработчик пункта меню File► Exit (Файл►Выход),

FileExit_Click()
, который просто закрывает окно, что в свою очередь приводит к завершению приложения, поскольку это окно самого высшего уровня. Обработчики событий
MouseEnter
и
MouseExit
для каждого подэлемента будут в итоге обновлять строку состояния; однако пока просто оставьте их пустыми. Наконец, обработчик
ToolsSpellingHints_Click()
для пункта меню ToolsSpelling Hints также оставьте пока пустым. Ниже показаны текущие обновления файла отделенного кода (в том числе обновленные операторы
using
):

using System.IO;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Input;

using Microsoft.Win32;

public partial class MainWindow : Window

{

  public MainWindow()

  {

    InitializeComponent();

  }

  protected void FileExit_Click(object sender, RoutedEventArgs args)

498
{"b":"847442","o":1}