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

UptoLike

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

110
событие PreviewExecuted, которое возбуждается непосредственно перед
этим.
Ниже показан код, который присоединяет обработчик событий
PreviewEvent в конструкторе окна и удаляет его при закрытии окна:
public MonitorCommands()
{
InitializeComponent();
this.AddHandler(CommandManager.PreviewExecutedEvent,
new ExecutedRoutedEventHandler(CommandExecuted));
}
private void window_Unloaded(object sender, RoutedEventArgs e)
{
this.RemoveHandler(CommandManager.PreviewExecutedEvent,
new ExecutedRoutedEventHandler(CommandExecuted));
}
При возбуждении события PreviewExecuted может потребоваться
определение, стоит ли на данную команду обращать внимание, и если да,
то должно выполниться создание элемента CommandHistoryItem и добав-
ление его в стек Undo. Также необходимо позаботится об исключении ве-
роятности возникновения двух потенциальных проблем. Во-первых, при
щелчке на кнопке в панели инструментов для выполнения команды в тек-
стовом поле событие CommandExecuted инициируется дважды: один раз
для кнопки в панели инструментов, а второй для текстового поля. В
приведенном коде дублирование записей в журнале Undo исключается пу-
тем игнорирования команды в случае, если отправителем является
ICommandSource. Во-вторых, команды, которые не следует добавлять в
журнал Undo, должны игнорироваться явным образом. К числу таких ко-
манд относится команда ApplicationUndo, которая позволяет отменять
предыдущее действие. Программный код, реализующий все вышесказан-
ное, представлен ниже:
private void CommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
// Ignore menu button source.