2016-08-30 48 views
1

我正在使用C#WPF和Avalon編輯文本框。WPF Avalon編輯使文本大寫

我想使文本框中的所有文本都爲大寫,並且我收到了一條錯誤消息,「此時應該打開無撤消組」。

我使用下面的代碼:

a.Text = a.Text.ToUpper(); 

其中 「a」 是AvalonEdit.TextEditor

謝謝。

回答

1

設置TextEditor.Text屬性具有清除撤消堆棧的副作用(就像使用正常的WPF TextBox一樣)。清除撤銷堆棧只有在沒有開放的撤消組時才被允許。

如果您不打算清除撤消堆棧,請使用textEditor.Document上的方法來修改文檔。您需要避免替換整個文本,因爲那樣會重置選擇和插入位置(畢竟,AvalonEdit無法知道新文本如何與舊文本相關)。

如果您確實想要清除撤消堆棧(例如將視圖切換到其他文檔),則必須找出爲什麼撤消組已打開。很可能,您的代碼是從撤消組仍處於打開狀態時調用的事件的事件處理程序運行的(例如document.TextChanged) - 您可能想切換到其他事件(例如,在撤消組之後調用document.UpdateFinished關閉)。

如果您只想輸入大寫文本,最好在將文本添加到文檔之前對其進行修改:處理TextArea.TextEntering事件以取消任何小寫輸入(設置e.Handled = true; ),而是調用TextArea.PerformTextInput()來改爲使用相應的大寫文本重複文本輸入過程。

對於複製粘貼,您可以處理附件DataObject.PastingEvent並修改要粘貼的數據。