Прежде всего свяжите команду с вашей кнопкой отмены.Напишите CommandBinding , подобный этому: <CommandBinding Command="Undo" Executed="ExecuteUndo" CanExecute="CanExecuteUndo"/>
Затем установите Content
RichTextBox на что-то вроде
{Binding myUndoManager.CurrentContent, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}
myUndoManager
- это DependencyProperty с типом UndoManager
класса.Вам необходимо реализовать этот класс и наследовать его от DependencyObject
и INotifyPropertyChanged
.в этом классе CurrentContent
- это DependencyProperty
, который хранит надлежащий контент для отображения, а событие PropertyChanged
обрабатывает все изменения в Content
RichTextBox. (вы можете добавить коллекцию в класс и при каждом вызове этого события добавлять новый элемент в коллекцию. Тип элементов для этой коллекции может иметь некоторые свойства, такие как TextDifferences, ActionType, ...)
Тогда все, что осталось, это реализовать тело CanExecuteUndo
и ExecuteUndo
внутри вашего кода. (e.CanExecute
может быть установлено в true внутри CanExecuteUndo
, если и только если коллекция не пуста. И ExecuteUndo
выдает последний элемент из коллекции и в соответствии с ActionType
делает необходимыедействия)
И не забудьте установить DataContext
окна (или RichTextBox) на {Binding RelativeSource={RelativeSource Self}}
, если myUndoManager
объект находится в том же классе, что и окно.