WPF Avalon Edit 使文本大写

WPF Avalon Edit Make text upper case

我正在使用 C# WPF 和 Avalon 编辑文本框。

我试图将文本框中的所有文本设为大写,但我收到一条错误消息 'No undo group should be open at this point'。

我正在使用以下代码:

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

其中 "a" 是 AvalonEdit.TextEditor

谢谢。

设置 TextEditor.Text 属性 具有清除撤消堆栈的副作用(就像普通 WPF TextBox 一样)。只有在没有打开的撤消组时才允许清除撤消堆栈。

如果您不打算清除撤消堆栈,请改用 textEditor.Document 上的方法来修改文档。您需要避免替换整个文本,因为这也会重置选择和插入符号位置(毕竟,AvalonEdit 无法知道您的新文本与旧文本的关系)。

如果您确实想要清除撤消堆栈(例如,您正在将视图切换到不同的文档),则必须找出撤消组打开的原因。最有可能的是,您的代码是 运行 来自撤消组仍处于打开状态时调用的事件的事件处理程序(例如 document.TextChanged)——您可能想要切换到另一个事件(例如document.UpdateFinished 撤消组关闭后调用。

如果您只想在输入文本时将其转换为大写,最好在将文本添加到文档之前对其进行修改:处理 TextArea.TextEntering 事件以取消任何小写-大小写输入(设置 e.Handled = true;),而不是调用 TextArea.PerformTextInput() 以使用相应的大写文本重复文本输入过程。

对于复制粘贴,您可以处理附件DataObject.PastingEvent并修改要粘贴的数据。