Системы меню в WPF представлены классом Menu, который поддерживает коллекцию объектов MenuItem
. При построении системы меню в XAML каждый объект MenuItem
можно заставить обрабатывать разнообразные события, наиболее примечательным из которых является Click
, возникающее при выборе подэлемента конечным пользователем. В рассматриваемом примере создаются два пункта меню верхнего уровня (File (Файл) и Tools (Сервис); позже будет построено меню Edit (Правка)), которые содержат в себе подэлементы Exit (Выход) и Spelling Hints (Подсказки по правописанию) соответственно.
В дополнение к обработке события Click
для каждого подэлемента необходимо также обработать события MouseEnter
и MouseExit
, которые применяются для установки текста в строке состояния. Добавьте в контекст элемента DockPanel
следующую разметку:
MouseLeave ="MouseLeaveArea" Click ="FileExit_Click"/>
MouseLeave ="MouseLeaveArea" Click ="ToolsSpellingHints_Click"
Cursor="Help" />
Ваш элемент управления ToolBar
образован из двух элементов управления Button
, которые предназначены для обработки тех же самых событий теми же методами из файла кода. С помощью такого приема можно дублировать обработчики для обслуживания и пунктов меню, и кнопок панели инструментов. Хотя в данной панели применяются типичные нажимаемые кнопки, вы должны принимать во внимание, что тип ToolBar
"является" ContentControl
, а потому на его поверхность можно помещать любые типы (скажем, раскрывающиеся списки, изображения и графику). Еще один интересный аспект связан с тем, что кнопка Check (Проверить) поддерживает специальный курсор мыши через свойство Cursor
.
На заметку! Элемент Toolbar
может быть дополнительно помещен внутрь элемента ToolBarTray
, который управляет компоновкой, стыковкой и перетаскиванием для набора объектов ToolBar
.
Построение строки состояния
Элемент управления строкой состояния (StatusBar
) стыкуется с нижней частью DockPanel
и содержит единственный элемент управления TextBlock
, который ранее в главе не использовался. Элемент TextBlock
можно применять для хранения текста с форматированием вроде выделения полужирным и подчеркивания, добавления разрывов строк и т.д. Поместите приведенную ниже разметку сразу после предыдущего определения элемента управления ToolBar
:
Завершение проектирования пользовательского интерфейса
Финальный аспект проектирования нашего пользовательского интерфейса связан с определением поддерживающего разделители элемента Grid
, в котором определены две колонки. Слева находится элемент управления Expander
, помещенный внутрь StackPanel
, который будет отображать список предполагаемых вариантов правописания, а справа — элемент TextBox
с поддержкой многострочного текста, линеек прокрутки и включенной проверкой орфографии. Элемент Grid
может быть целиком размещен в левой части родительской панели DockPanel
. Чтобы завершить определение пользовательского интерфейса окна, добавьте следующую разметку XAML, расположив ее непосредственно под разметкой, которая описывает StatusBar
:
Spelling Hints
Margin="10,10,10,10">
SpellCheck.IsEnabled ="True"
AcceptsReturn ="True"
Name ="txtData" FontSize ="14"
BorderBrush ="Blue"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
Реализация обработчиков событий MouseEnter/MouseLeave
К настоящему моменту пользовательский интерфейс окна готов. Понадобится лишь предоставить реализации оставшихся обработчиков событий. Начните с обновления файла кода C# так, чтобы каждый из обработчиков событий MouseEnter
и MouseLeave
устанавливал в текстовой панели строки состояния подходящее сообщение, которое окажет помощь конечному пользователю:
public partial class MainWindow : System.Windows.Window
{
...
protected void MouseEnterExitArea(object sender, RoutedEventArgs args)
{
statBarText.Text = "Exit the Application";
}
protected void MouseEnterToolsHintsArea(object sender, RoutedEventArgs args)
{
statBarText.Text = "Show Spelling Suggestions";
}