Книги онлайн и без регистрации » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 319 320 321 322 323 324 325 326 327 ... 407
Перейти на страницу:
в WPF представлены классом Menu, который поддерживает коллекцию объектов MenuItem. При построении системы меню в XAML каждый объект MenuItem можно заставить обрабатывать разнообразные события, наиболее примечательным из которых является Click, возникающее при выборе подэлемента конечным пользователем. В рассматриваемом примере создаются два пункта меню верхнего уровня (File (Файл) и Tools (Сервис); позже будет построено меню Edit (Правка)), которые содержат в себе подэлементы Exit (Выход) и Spelling Hints (Подсказки по правописанию) соответственно.

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

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

<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 содержат символ подчеркивания (например, _Exit). Подобным образом указывается символ, который будет подчеркиваться, когда конечный пользователь нажмет клавишу <Alt> (для ввода клавиатурного сокращения). Символ подчеркивания используется вместо символа & в Windows Forms, т.к. язык XAML основан на XML, а символ & в 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)

  {

    // Закрыть это окно.

    this.Close();

  }

  protected void ToolsSpellingHints_Click(object sender, RoutedEventArgs args)

  {

  }

  protected void MouseEnterExitArea(object sender, RoutedEventArgs args)

  {

  }

  protected void MouseEnterToolsHintsArea(object sender, RoutedEventArgs args)

  {

  }

  protected void MouseLeaveArea(object sender, RoutedEventArgs args)

  {

  }

}

Визуальное построение меню

Наряду с тем, что всегда полезно знать, как вручную определять элементы в XAML, такая работа может быть слегка утомительной. В Visual Studio поддерживается возможность визуального конструирования систем меню, панелей инструментов, строк состояния и многих других элементов управления пользовательского интерфейса. Щелчок правой кнопкой мыши на элементе управления Menu приводит к открытию контекстного меню, содержащего Add MenuItem (Добавить MenuItem), который позволяет добавить новый пункт меню в элемент управления Menu. После добавления набора пунктов верхнего уровня можно заняться добавлением пунктов подменю, разделителей, развертыванием и свертыванием самого меню и выполнением других связанных с меню операций посредством второго щелчка правой кнопкой мыши.

В оставшейся части примера MyWordPad вы увидите финальную сгенерированную разметку XAML; тем не менее, посвятите некоторое время экспериментированию с визуальными конструкторами.

Построение панели инструментов

Панели инструментов (представляемые в WPF классом ToolBar) обычно предлагают альтернативный способ активизации пунктов меню. Поместите следующую разметку непосредственно после закрывающего дескриптора определения Menu:

<!-- Поместить панель инструментов под областью меню -->

<ToolBar DockPanel.Dock ="Top" >

  <Button Content ="Exit" MouseEnter ="MouseEnterExitArea"

      MouseLeave ="MouseLeaveArea" Click ="FileExit_Click"/>

  <Separator/>

  <Button Content ="Check" MouseEnter ="MouseEnterToolsHintsArea"

      MouseLeave ="MouseLeaveArea" Click ="ToolsSpellingHints_Click"

      Cursor="Help" />

</ToolBar>

Ваш элемент управления ToolBar образован из двух элементов управления Button, которые предназначены для обработки тех же самых событий теми же методами из файла кода. С помощью такого приема можно дублировать обработчики для обслуживания и пунктов меню, и кнопок панели инструментов. Хотя в данной панели применяются типичные нажимаемые кнопки, вы должны принимать во внимание, что тип ToolBar "является" ContentControl, а потому на его поверхность можно помещать любые типы (скажем, раскрывающиеся списки, изображения и графику). Еще один интересный аспект связан с тем, что кнопка Check (Проверить) поддерживает специальный курсор мыши через свойство Cursor.

На заметку! Элемент Toolbar может быть дополнительно помещен внутрь элемента ToolBarTray, который управляет компоновкой, стыковкой и перетаскиванием для набора объектов ToolBar.

Построение строки состояния

Элемент управления строкой состояния (StatusBar) стыкуется с нижней частью DockPanel и содержит единственный элемент управления TextBlock, который ранее в главе не использовался. Элемент TextBlock можно применять для хранения текста с форматированием вроде выделения полужирным и подчеркивания, добавления разрывов строк и т.д. Поместите приведенную ниже разметку сразу после предыдущего определения элемента управления ToolBar:

<!-- Разместить строку состояния внизу -->

<StatusBar DockPanel.Dock ="Bottom" Background="Beige" >

  <StatusBarItem>

    <TextBlock Name="statBarText" Text="Ready"/>

  </StatusBarItem>

</StatusBar>

Завершение проектирования пользовательского интерфейса

Финальный аспект проектирования нашего пользовательского интерфейса связан с определением поддерживающего разделители элемента Grid, в котором определены две колонки. Слева находится элемент управления Expander, помещенный внутрь StackPanel, который будет отображать список предполагаемых вариантов правописания, а справа — элемент TextBox с поддержкой многострочного текста, линеек прокрутки и включенной проверкой орфографии. Элемент Grid может быть целиком размещен в левой части родительской панели DockPanel. Чтобы завершить определение пользовательского интерфейса окна, добавьте следующую разметку XAML, расположив ее непосредственно под разметкой, которая описывает StatusBar:

<Grid DockPanel.Dock ="Left" Background ="AliceBlue">

  <!-- Определить строки и колонки

1 ... 319 320 321 322 323 324 325 326 327 ... 407
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. В коментария нецензурная лексика и оскорбления ЗАПРЕЩЕНЫ! Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?