如何暂停Avalonedit的Undostack?

0xD*_*EEF 5 c# wpf stack avalonedit

  • 我在编辑器上执行了大量的文本更改
  • 我不能(或非常难)确定更改何时开始结束(通过滚动释放文本更改)
  • 我不希望能够撤消更改

由于这个原因,我想暂停监听堆栈(或在任何textchange之后执行pop).但

  • 堆栈没有提供弹出stackelement而不执行undo的方法
  • 我不想完全清除堆栈
  • 没有方法从文本文档中分离堆栈
  • 没有办法暂停收听

你知道解决这个问题的可能性吗?

Dan*_*iel 8

您希望撤消堆栈不记录某些更改,但是也不想将其清除?这意味着撤消堆栈的内容可能与文档内容不一致 - 当用户然后按下撤消时,它可能最终崩溃或更改除预期位置之外的文本.

因此,AvalonEdit不支持此操作.我们非常努力地避免不一致的撤销堆栈 - 例如,TextDocument.Changed不允许重入更新(在事件处理程序中更改文档).

您可以设置的最接近禁用撤消堆栈的方法是设置

document.UndoStack.SizeLimit = 0;
Run Code Online (Sandbox Code Playgroud)

这将有效地禁用侦听更改,但它也将清除撤消堆栈.

作为旁注:可以"分离"撤销堆栈(通过设置document.UndoStack到另一个撤消堆栈),但这也将清除旧的撤消堆栈.