我正在使用带有Avalon编辑文本框的C#WPF。
我正在尝试将文本框中的所有文字都设为大写,并且在收到其他消息时出现错误'此时不应该打开撤消组'。
我使用以下代码:
a.Text = a.Text.ToUpper();
其中" a"是AvalonEdit.TextEditor
谢谢。
答案 0 :(得分:1)
设置TextEditor.Text
属性具有清除撤消堆栈的副作用(与普通WPF TextBox
一样)。仅当没有打开撤消组时,才允许清除撤消堆栈。
如果您不打算清除撤消堆栈,请使用textEditor.Document
上的方法来修改文档。您将要避免替换整个文本,因为这也会重置选择和插入位置(毕竟,AvalonEdit无法知道新文本与旧文本的关系)。
如果您确实要清除撤消堆栈(例如,您将视图切换到其他文档),则必须弄清楚撤消组的打开原因。最有可能的是,您的代码是在撤消组仍处于打开状态时调用的事件的事件处理程序中运行的(例如document.TextChanged
) - 您可能希望切换到其他事件(例如{{1}在撤消组关闭后调用。)
如果要输入的是大写文本,最好在文本添加到文档之前修改文本:处理document.UpdateFinished
事件以取消任何小写输入(设置TextArea.TextEntering
),而是调用e.Handled = true;
重复文本输入过程,改为使用相应的大写文本。
对于复制粘贴,您可以处理附加的TextArea.PerformTextInput()
并修改要粘贴的数据。