【问题标题】:How to Suspend the Undostack of Avalonedit?如何暂停 Avalonedit 的 Undostack?
【发布时间】:2011-11-26 18:56:41
【问题描述】:
  • 我在编辑器上执行了大量的文本更改
  • 我无法(或很难)确定更改何时开始结束(文本更改通过滚动释放)
  • 我不希望能够撤消更改

出于这个原因,我想暂停堆栈的侦听(或在任何文本更改后执行弹出)。但是

  • 堆栈不提供在不执行撤消的情况下弹出堆栈元素的方法
  • 我不想完全清除堆栈
  • 没有方法可以从文本文档中分离堆栈
  • 没有办法暂停收听

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

【问题讨论】:

    标签: c# wpf stack avalonedit


    【解决方案1】:

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

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

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

    document.UndoStack.SizeLimit = 0;
    

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

    附带说明:可以“分离”撤消堆栈(通过将document.UndoStack 设置为另一个撤消堆栈),但这也会清除旧的撤消堆栈。

    【讨论】:

    • 哦,我还没有意识到这一点。好的,那么我必须采用另一种方式:将所有更改汇总到一个 undogroup 中,以避免在 undostack 中出现数千个无用的元素。我将在我的项目的测试分支中对其进行测试。感谢您的帮助
    • 如果没有简单的方法来确定操作的结束,您可能需要查看 UndoStack.StartContinuedUndoGroup()。
    猜你喜欢
    • 2015-06-19
    • 2021-02-03
    • 2011-06-25
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多