2012-06-23 35 views
2

我知道,如果处理编辑器的PreviewKeyDown事件,然后将KeyEventArgs的e.Handled设置为true,则可以完全禁用输入。防止文本在AvalonEdit中更新

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

textEditor.Document.Changing += Document_Changing; 

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

private void Document_Changing(object sender, DocumentChangeEventArgs e) 

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

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

预先感谢您

回答

5

可以使用textEditor.TextArea.TextEntering事件,以防止打字的用户。 但是,该事件仅用于打字;其他操作(例如,剪切/粘贴/拖放)现在不会导致任何编辑器事件(只有文档事件,但此时不能中止)。

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

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