Язык программирования C#9 и платформа .NET5
Часть 502 из 642 Информация о книге
public MainWindow(){InitializeComponent();SetF1CommandBinding();}Метод
будет программно создавать новый объектSetFICommandBinding(), который можно применять всякий раз, когда требуется привязать объект команды к заданному обработчику событий в приложении. Сконфигурируйте объектCommandBindingдля работы с командойCommandBinding, которая автоматически выдается по нажатию клавиши <F1>:ApplicationCommands.Helpprivate void SetF1CommandBinding(){CommandBinding helpBinding = new CommandBinding(ApplicationCommands.Help);helpBinding.CanExecute += CanHelpExecute;helpBinding.Executed += HelpExecuted;CommandBindings.Add(helpBinding);}Большинство объектов
будет обрабатывать событиеCommandBinding(которое позволяет указать, инициируется ли команда для конкретной операции программы) и событиеCanExecute(где можно определить код, подлежащий выполнению после того, как команда произошла). Добавьте к типу, производному отExecuted, следующие обработчики событий (форматы методов регламентируются ассоциированными делегатами):Windowprivate 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, представляет собой всего лишь обычное окно сообщения. Теперь можете запустить приложение. После нажатия <F1> появится ваше окно сообщения.HelpExecute()Работа с командами Open и Save
Чтобы завершить текущий пример, вы добавите функциональность сохранения текстовых данных во внешнем файле и открытия файлов
для редактирования. Можно пойти длинным путем, вручную добавив программную логику, которая включает и отключает пункты меню в зависимости от того, имеются ли данные внутри*.txt. Тем не менее, для сокращения усилий можно прибегнуть к услугам команд.TextBoxНачните с обновления элемента
, который представляет меню File верхнего уровня, путем добавления двух новых подменю, использующих объектыMenuItemи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Понадобится наполнить коллекцию
, поддерживаемую окном. В разметке XAML потребуется применить синтаксис "свойство-элемент" для определения областиCommandBindings, в которую помещаются два определения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"