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

UptoLike

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

111
if (e.Source is ICommandSource) return;
// Ignore the ApplicationUndo command.
if (e.Command == MonitorCommands.ApplicationUndo) return;
// Could filter for commands you want to add to the stack
// (for example, not selection events).
TextBox txt = e.Source as TextBox;
if (txt != null)
{
RoutedCommand cmd = (RoutedCommand)e.Command;
CommandHistoryItem historyItem = new CommandHistoryItem(
cmd.Name, txt, "Text", txt.Text);
ListBoxItem item = new ListBoxItem();
item.Content = historyItem;
lstHistory.Items.Add(historyItem);
// CommandManager.InvalidateRequerySuggested();
}
}
В данном примере все объекты CommandHistoryItem сохраняются в
элементе ListBox. Для свойства DisplayMember этого элемента устанавли-
вается значение Name так, чтобы в нем отображалось свойство
CommandHistoryltem.Name каждого объекта. В показанном коде функция
Undo поддерживается только в том случае, если команда инициируется
для текстового поля. Однако этот код является достаточно универсальным
для того, чтобы работать с любым текстовым полем в окне, следователь-
но, его можно легко расширить так, чтобы он поддерживал и другие эле-
менты управления и свойства.
Последняя необходимая деталь это код, выполняющий операцию
отмены (Undo) в масштабах приложения. С помощью обработчика
CanExecute можно сделать так, чтобы он выполнялся только при наличии
в журнале Undo хотя бы одного элемента:
private void ApplicationUndoCommand_CanExecute(object sender, CanExecut-
eRoutedEventArgs e)