[英]RichTextBox Undo process for custom UIContainer
我在WPF中有RichTextBox,其中包含带有一些自定义对象的InlineUIContainer
。 如何允许该UIContainer的撤消事件?
首先,将命令绑定到撤消按钮。 编写类似于以下内容的CommandBinding : <CommandBinding Command="Undo" Executed="ExecuteUndo" CanExecute="CanExecuteUndo"/>
然后将RichTextBox的Content
设置为这样
{Binding myUndoManager.CurrentContent, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}
myUndoManager
是DependencyProperty,具有UndoManager
类的类型。 您需要实现此类并从DependencyObject
和INotifyPropertyChanged
继承它。 在此类中, CurrentContent
是DependencyProperty
,它保留要显示的正确内容, PropertyChanged
事件处理RichTextBox Content
的所有更改。 (您可以向该类添加一个集合,并且每次调用此事件时,都向该集合添加一个新项目。此集合的项目类型可能具有一些属性,例如TextDifferences,ActionType等)
然后剩下的就是在代码中实现CanExecuteUndo
和ExecuteUndo
的主体。 (如果且仅当集合不为空时, e.CanExecute
可以在CanExecuteUndo
内设置为true。并且ExecuteUndo
从集合中弹出最后一项,并根据其ActionType
进行必要的操作)
如果myUndoManager
对象与窗口在同一类中,请不要忘记将窗口(或RichTextBox)的DataContext
设置为{Binding RelativeSource={RelativeSource Self}}
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.