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
并修改要粘贴的数据。
我正在使用 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
并修改要粘贴的数据。