public MainWindow()
{
InitializeComponent();
SetF1CommandBinding();
}
Метод SetFICommandBinding() будет программно создавать новый объект CommandBinding, который можно применять всякий раз, когда требуется привязать объект команды к заданному обработчику событий в приложении. Сконфигурируйте объект CommandBinding для работы с командой ApplicationCommands.Help, которая автоматически выдается по нажатию клавиши <F1>:
private void SetF1CommandBinding()
{
CommandBinding helpBinding = new CommandBinding(ApplicationCommands.Help);
helpBinding.CanExecute += CanHelpExecute;
helpBinding.Executed += HelpExecuted;
CommandBindings.Add(helpBinding);
}
Большинство объектов CommandBinding будет обрабатывать событие CanExecute (которое позволяет указать, инициируется ли команда для конкретной операции программы) и событие Executed (где можно определить код, подлежащий выполнению после того, как команда произошла). Добавьте к типу, производному от Window, следующие обработчики событий (форматы методов регламентируются ассоциированными делегатами):
private void CanHelpExecute(object sender, CanExecuteRoutedEventArgs e)
{
<b> // Если нужно предотвратить выполнение команды,</b>
<b> // то можно установить CanExecute в false.</b>
e.CanExecute = true;
}
private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("Look, it is not that difficult. Just type something!",
"Help!");
}
В предыдущем фрагменте кода метод CanHelpExecute() реализован так, что справка по нажатию <F1> всегда разрешена; это делается путем возвращения true. Однако если в определенных ситуациях справочная система отображаться не должна, то необходимо предпринять соответствующую проверку и возвращать false. Созданная "справочная система", отображаемая внутри HelpExecute(), представляет собой всего лишь обычное окно сообщения. Теперь можете запустить приложение. После нажатия <F1> появится ваше окно сообщения.
Работа с командами Open и Save
Чтобы завершить текущий пример, вы добавите функциональность сохранения текстовых данных во внешнем файле и открытия файлов *.txt для редактирования. Можно пойти длинным путем, вручную добавив программную логику, которая включает и отключает пункты меню в зависимости от того, имеются ли данные внутри TextBox. Тем не менее, для сокращения усилий можно прибегнуть к услугам команд.
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
Начните с обновления элемента MenuItem, который представляет меню File верхнего уровня, путем добавления двух новых подменю, использующих объекты Save и Open класса ApplicationCommands:
<MenuItem Header="_File">
<MenuItem Command ="ApplicationCommands.Open"/>
<MenuItem Command ="ApplicationCommands.Save"/>
<Separator/>
<MenuItem Header ="_Exit"
MouseEnter ="MouseEnterExitArea"
MouseLeave ="MouseLeaveArea" Click ="FileExit_Click"/>
</MenuItem>
Вспомните, что все объекты команд реализуют интерфейс ICommand, в котором определены два события (CanExecute и Executed). Теперь необходимо разрешить окну выполнять указанные команды, предварительно проверив возможность делать это в текущих обстоятельствах; раз так, можете определить обработчик события для запуска специального кода.
Понадобится наполнить коллекцию CommandBindings, поддерживаемую окном. В разметке XAML потребуется применить синтаксис "свойство-элемент" для определения области Window.CommandBindings, в которую помещаются два определения CommandBinding. Модифицируйте определение Window, как показано ниже:
<Window x:Class="MyWordPad.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MySpellChecker" Height="331" Width="508"
WindowStartupLocation ="CenterScreen" >
<b> <!-- Это информирует элемент управления Window о том, какие</b>
<b> обработчики вызывать при поступлении команд Open и Save --></b>
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open"
Executed="OpenCmdExecuted"