在RichEditBox中包含当前撤消组中的文本更改?

时间:2017-06-17 00:33:48

标签: c# xaml uwp win-universal-app windows-10-universal

我正在使用UWP应用程序并且我使用RichEditBox控件,而且我在撤消功能方面遇到了一些问题。

我知道我可以使用BeginUndoGroup公开的ITextDocument对象中的RichEditBox方法来创建我可以在编辑文本时使用的撤消组,因此用户将撤消所有这些变化在一起(当我打电话给EndUndoGroup时)。

我的问题是我的应用程序中有一些自动完成功能,而且我不知道如何制作它以便我为自动完成添加的字符/更改包含在上一个撤消组中。< / p>

  

例如,假设您输入了&#39; h&#39;我从TextChanged事件(或RichEditBox中的另一个事件中检测到这一点,并在文本中添加&#34; ello&#34;所以你最终得到&#34;你好&# 34 ;,然后将整个单词用绿色着色。

     

如果我使用BeginUndoGroup方法,我可以撤消添加的&#34; ello&#34;和绿色,但用户仍将最终得到&#39; h&#39;性格在那里。

     

或者,例如,如果我以随机颜色为每个新角色着色,我不知道如何制作它以便撤消功能将撤消我的颜色变化和用户输入的前一个字符。

有没有办法解决这个问题(即在当前/之前的撤销组中包含一些更改),或者我只需要提出一些肮脏的黑客行为,例如在调用Undo方法时两次用户想要撤消更改,希望他不会注意到文本闪烁?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看起来没有内置的解决方案,所以我通过从BeginUndoGroup事件处理程序调用{​​{1}}来解决问题(更多的解决方法,但到目前为止它工作正常) ,并在KeyDown处理程序中调用EndUndoGroup

我也在应用语法高亮显示之前和之后禁用/启用TextChanged处理程序,或者在我应用文本格式时执行该处理程序。

此外,将TextChanged / Begin称为完美配对似乎并不重要,因为在错误的情况下调用其中任何一个(例如,在没有时调用EndUndoGroup一个新的开放组,或连续两次EndUndoGroup只是什么都不做,所以不用担心这一点。