Для подключения любого свойства команд WPF к элементу пользовательского интерфейса, который поддерживает свойство Command
(такому как Button
или MenuItem
), потребуется проделать совсем небольшую работу. В качестве примера модифицируйте текущую систему меню, добавив новый пункт верхнего уровня по имени Edit (Правка) с тремя подэлементами, которые позволяют копировать, вставлять и вырезать текстовые данные:
BorderBrush ="Black">
MouseLeave ="MouseLeaveArea"
Click ="FileExit_Click"/>
MouseEnter ="MouseEnterToolsHintsArea"
MouseLeave ="MouseLeaveArea"
Click ="ToolsSpellingHints_Click"/>
Обратите внимание, что свойству Command
каждого подэлемента в меню Edit присвоено некоторое значение. В результате пункты меню автоматически получают корректные имена и горячие клавиши (например, <Ctrl+C> для операции вырезания) в пользовательском интерфейсе меню, и приложение теперь способно
Если вы запустите приложение и выделите какую-то часть текста, то сразу же сможете пользоваться новыми пунктами меню. Вдобавок приложение также оснащено возможностью реагирования на стандартную операцию щелчка правой кнопкой мыши, предлагая пользователю те же самые пункты в контекстном меню.
Подключение команд к произвольным действиям
Если объект команды нужно подключить к произвольному событию (специфичному для приложения), то придется прибегнуть к написанию процедурного кода. Задача несложная, но требует чуть больше логики, чем можно видеть в XAML. Например, пусть необходимо, чтобы все окно реагировало на нажатие клавиши <F1>, активизируя ассоциированную с ним справочную систему. Также предположим, что в файле кода для главного окна определен новый метод по имени SetFICommandBinding
, который вызывается внутри конструктора после вызова InitializeComponent
:
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)
{
// Если нужно предотвратить выполнение команды,
// то можно установить 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
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT