2

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

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

textEditor.Document.Changing += Document_Changing;

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

private void Document_Changing(object sender, DocumentChangeEventArgs e)

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

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

先感谢您

4

1 回答 1

6

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

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

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

于 2012-07-19T18:28:08.340 回答