Большинство объектов CommandBinding
CanExecute (которое позволяет указать, инициируется ли команда для конкретной операции программы) и событие Executed (где можно определить код, подлежащий выполнению после того, как команда произошла). Добавьте к типу, производному от Window, следующие обработчики событий (форматы методов регламентируются ассоциированными делегатами):private void CanHelpExecute(object sender, CanExecuteRoutedEventArgs e)
{
// Если нужно предотвратить выполнение команды,
// то можно установить CanExecute в false.
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. Тем не менее, для сокращения усилий можно прибегнуть к услугам команд.Начните с обновления элемента MenuItem
Save и Open класса ApplicationCommands:
MouseEnter ="MouseEnterExitArea"
MouseLeave ="MouseLeaveArea" Click ="FileExit_Click"/>
Вспомните, что все объекты команд реализуют интерфейс ICommand
CanExecute и Executed). Теперь необходимо разрешить окну выполнять указанные команды, предварительно проверив возможность делать это в текущих обстоятельствах; раз так, можете определить обработчик события для запуска специального кода.Понадобится наполнить коллекцию CommandBindings
Window.CommandBindings, в которую помещаются два определения CommandBinding. Модифицируйте определение Window, как показано ниже: 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" >
Executed="OpenCmdExecuted"
CanExecute="OpenCmdCanExecute"/>
Executed="SaveCmdExecuted"
CanExecute="SaveCmdCanExecute"/>
...
Щелкните правой кнопкой мыши на каждом из атрибутов Executed
CanExecute в редакторе XAML и выберите в контекстном меню пункт Navigate to Event Handler (Перейти к обработчику события). Как объяснялось в главе 24, в результате автоматически сгенерируется заготовка кода для обработчика события. Теперь в файле кода C# для окна должны присутствовать четыре пустых обработчика событий.Реализация обработчиков события CanExecute
Executed в любой момент, для чего свойство CanExecute входного объекта CanExecuteRoutedEventArgs устанавливается в true:private void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void SaveCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}