Инфраструктура WPF поставляется с множеством встроенных команд, каждую из которых можно ассоциировать с соответствующей клавиатурной комбинацией (или другим входным жестом). С точки зрения программирования команда WPF — это любой объект, поддерживающий свойство (часто называемое Command), которое возвращает объект, реализующий показанный ниже интерфейс ICommand:

public interface ICommand

{

  // Возникает, когда происходят изменения, влияющие

  // на то, должна выполняться команда или нет.

  event EventHandler CanExecuteChanged;

  // Определяет метод, который выясняет, может ли

  // команда выполняться в ее текущем состоянии.

  bool CanExecute(object parameter);

  // Определяет метод для вызова при обращении к команде.

  void Execute(object parameter);

}

В WPF предлагаются разнообразные классы команд, которые открывают доступ к примерно сотне готовых объектов команд. В таких классах определены многочисленные свойства, представляющие специфические объекты команд, каждый из которых реализует интерфейс ICommand. В табл. 25.3 кратко описаны избранные стандартные объекты команд.

<p id="AutBody_Root1137"><strong>Подключение команд к свойству Command</strong></p>

Для подключения любого свойства команд WPF к элементу пользовательского интерфейса, который поддерживает свойство Command (такому как Button или MenuItem), потребуется проделать совсем небольшую работу. В качестве примера модифицируйте текущую систему меню, добавив новый пункт верхнего уровня по имени Edit (Правка) с тремя подэлементами, которые позволяют копировать, вставлять и вырезать текстовые данные:

BorderBrush ="Black">

 

   

       MouseLeave ="MouseLeaveArea"

       Click ="FileExit_Click"/>

 

 

 

   

   

   

 

 

   

        MouseEnter ="MouseEnterToolsHintsArea"

        MouseLeave ="MouseLeaveArea"

        Click ="ToolsSpellingHints_Click"/>

 

Обратите внимание, что свойству Command каждого подэлемента в меню Edit присвоено некоторое значение. В результате пункты меню автоматически получают корректные имена и горячие клавиши (например, <Ctrl+C> для операции вырезания) в пользовательском интерфейсе меню, и приложение теперь способно копировать, вырезать и вставлять текст без необходимости в написании процедурного кода.

Если вы запустите приложение и выделите какую-то часть текста, то сразу же сможете пользоваться новыми пунктами меню. Вдобавок приложение также оснащено возможностью реагирования на стандартную операцию щелчка правой кнопкой мыши, предлагая пользователю те же самые пункты в контекстном меню.

<p id="AutBody_Root1138"><strong>Подключение команд к произвольным действиям</strong></p>

Если объект команды нужно подключить к произвольному событию (специфичному для приложения), то придется прибегнуть к написанию процедурного кода. Задача несложная, но требует чуть больше логики, чем можно видеть в 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);

}

Перейти на страницу:

Похожие книги