防止文本在AvalonEdit中更新

时间:2012-06-23 16:16:26

标签: c# wpf avalonedit

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

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

textEditor.Document.Changing += Document_Changing;

其中textEditor是我的AvalonEdit编辑器。我想在函数

中检索正在修改的文本
private void Document_Changing(object sender, DocumentChangeEventArgs e)

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

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

提前谢谢

1 个答案:

答案 0 :(得分:6)

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

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

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