Язык программирования C#9 и платформа .NET5
Вашей целью является конструирование компоновки, в которой главное окно имеет расположенную в верхней части систему меню, под ней — панель инструментов и в нижней части окна — строку состояния. Строка состояния будет содержать область для текстовых подсказок, которые отображаются при выборе пользователем пункта меню (или кнопки в панели инструментов). Система меню и панель инструментов предоставят триггеры пользовательского интерфейса для закрытия приложения и отображения вариантов правописания в виджете
.ExpanderНа рис. 25.14 показана начальная компоновка; она также иллюстрирует возможности правописания в рамках инфраструктуры WPF.
Чтобы приступить к построению интересующего пользовательского интерфейса, модифицируйте начальное определение 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, который поддерживает коллекцию объектов
. При построении системы меню в XAML каждый объектMenuItemможно заставить обрабатывать разнообразные события, наиболее примечательным из которых являетсяMenuItem, возникающее при выборе подэлемента конечным пользователем. В рассматриваемом примере создаются два пункта меню верхнего уровня (File (Файл) и Tools (Сервис); позже будет построено меню Edit (Правка)), которые содержат в себе подэлементы Exit (Выход) и Spelling Hints (Подсказки по правописанию) соответственно.ClickВ дополнение к обработке события
для каждого подэлемента необходимо также обработать событияClickиMouseEnter, которые применяются для установки текста в строке состояния. Добавьте в контекст элементаMouseExitследующую разметку:DockPanel<b><!-- Стыковать систему меню к верхней части —></b><Menu DockPanel.Dock ="Top"HorizontalAlignment="Left" Background="White" BorderBrush ="Black"><MenuItem Header="_File"><Separator/><MenuItem Header ="_Exit" MouseEnter ="MouseEnterExitArea"MouseLeave ="MouseLeaveArea" Click ="FileExit_Click"/></MenuItem><MenuItem Header="_Tools"><MenuItem Header ="_Spelling Hints"MouseEnter ="MouseEnterToolsHintsArea"MouseLeave ="MouseLeaveArea" Click ="ToolsSpellingHints_Click"/></MenuItem></Menu>Обратите внимание, что система меню стыкована с верхней частью
. Кроме того, элементDockPanelприменяется для добавления в систему меню тонкой горизонтальной линии прямо перед пунктомSeparator. ЗначенияExitдля каждогоHeaderсодержат символ подчеркивания (например,MenuItem). Подобным образом указывается символ, который будет подчеркиваться, когда конечный пользователь нажмет клавишу <Alt> (для ввода клавиатурного сокращения). Символ подчеркивания используется вместо символа_Exitв Windows Forms, т.к. язык XAML основан на XML, а символ&в XML имеет особый смысл.&После построения системы меню необходимо реализовать различные обработчики событий. Прежде всего, есть обработчик пункта меню File► Exit (Файл►Выход),
, который просто закрывает окно, что в свою очередь приводит к завершению приложения, поскольку это окно самого высшего уровня. Обработчики событийFileExit_Click()иMouseEnterдля каждого подэлемента будут в итоге обновлять строку состояния; однако пока просто оставьте их пустыми. Наконец, обработчикMouseExitдля пункта меню Tools►Spelling Hints также оставьте пока пустым. Ниже показаны текущие обновления файла отделенного кода (в том числе обновленные операторыToolsSpellingHints_Click()):usingusing 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)
