RichTextBox Отменить процесс для пользовательского UIContainer - PullRequest
1 голос
/ 18 декабря 2011

У меня есть RichTextBox в WPF, который содержит InlineUIContainer с некоторыми пользовательскими объектами.Как разрешить событие отмены для этого UIContainer?

1 Ответ

0 голосов
/ 19 декабря 2011

Прежде всего свяжите команду с вашей кнопкой отмены.Напишите 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 объект находится в том же классе, что и окно.

...