2012-06-23 66 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;即可。