【问题标题】:Preventing Text From Updating In AvalonEdit防止文本在 AvalonEdit 中更新
【发布时间】:2012-06-23 16:16:25
【问题描述】:

我知道,如果您处理编辑器的 PreviewKeyDown 事件,然后将 KeyEventArgs 的 e.Handled 设置为 true,则可以完全禁用输入。

但是,我试图弄清楚如何防止文档文本在文本被修改后更新。我想处理 Document.Changing 事件,如下所示:

textEditor.Document.Changing += Document_Changing;

其中 textEditor 是我的 AvalonEdit 编辑器。我想在函数中检索正在修改的文本

private void Document_Changing(object sender, DocumentChangeEventArgs e)

然后根据它做一些计算。但是,我不希望文本在处理之前在编辑器中更新。我正在 Document_Changing 中进行一些异步处理,当它完成时我会触发另一个事件,然后我才希望它更新。我不想只禁用视觉更新,而是完全更新文档。

那么有没有办法禁用此更新,类似于在处理与键盘相关的事件时如何阻止输入?

提前谢谢你

【问题讨论】:

    标签: c# wpf avalonedit


    【解决方案1】:

    您可以使用textEditor.TextArea.TextEntering 事件来阻止用户输入。 但是,该事件仅用于打字;其他操作(例如 Cut/Paste/Drag'n'Drop)目前不会导致任何编辑器事件(仅文档事件,但此时中止为时已晚)。

    另一个选项是实现IReadOnlySectionProvider 将文本标记为只读。这适用于文本输入和剪贴板操作,甚至在插入符号位于只读部分时禁用“粘贴”菜单命令。 TextSegmentReadOnlySectionProvider 类为接口提供了一个有用的默认实现。

    要将整个文档设为只读,只需设置textEditor.IsReadOnly = true;

    【讨论】:

    • 你能添加一个关于IReadOnlySectionProvider接口使用的小例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多