Классические элементы пользовательского интерфейса в Windows Presentation Foundation. Шамшев Ан. Б. - 110 стр.

UptoLike

Составители: 

109
{
get { return MonitorCommands.applicationUndo; }
}
static MonitorCommands()
{
applicationUndo = new RoutedUICommand(
«ApplicationUndo», «Application Undo», typeof(MonitorCommands));
}
В данном примере эта команда определяется в классе окна по имени
MonitorCommands.
Пока что код не производит впечатления сложного (за исключением
небольшого фрагмента с кодом рефлексии, который выполняет операцию
отмены). Самой сложной частью является интеграция в модель команд
WPF журнала команд. Идеальным решением будет организовать это так,
чтобы отслеживать можно было любую команду, независимо от того, как
она инициируется и связывается.
Обеспечить реагирование на конкретную команду довольно легко,
однако задача состоит в обеспечении реагирования на выполнение любой
команды. Решение заключается в использовании класса
CommandManager, который предоставляет несколько статических собы-
тий. К числу этих событий относятся CanExecute, PreviewCanExecute, Exe-
cuted и PreviewCanExecuted. В данном примере наиболее интересными яв-
ляются два последних события, потому что они возбуждаются всякий раз,
когда выполняется какая - либо команда.
Событие Executed подавляется классом CommandManager, но все
равно можно присоединить обработчик событий с помощью метода
UIElement.AddHandler() и передать в нем в качестве необязательно третье-
го параметра значение true. Это позволит извлекать событие, даже не-
смотря на то, что оно обрабатывается. Однако событие Executed возбуж-
дается после выполнения события, когда уже поздно сохранять информа-
цию о состоянии задействованного элемента управления в журнале ко-
манд. Поэтому нужно обеспечивать реагирование на это событие, а не на