自定义撤销重做的RichTextBox

本文关键字:RichTextBox 重做 自定义 | 更新日期: 2023-09-27 18:18:35

是否有一种方法来设置一个Richtextbox,不合并文本撤消单位在它的撤消堆栈。默认行为是,当您写入文本(都在同一段落中)时,您键入的整个文本属于相同的撤消单元。我想要的是每个单词都有一个撤销单位。我试过了,但是没有用。

->在输入文本之前:

myRichTextBox.BeginChange();

->你刚刚打了一个空格:

myRichTextBox.EndChange();
myRichTextBox.LockCurrentUndoUnit();
myRichTextBox.BeginChange();

但是当我运行应用程序时,在我输入一些文本之后,撤消命令(ctrl+z)的行为仍然是相同的。

自定义撤销重做的RichTextBox

覆盖OnPreviewKeyDown(KeyEventArgs e)方法,然后添加如下:

if (e.Key==Key.Space)
{
   BeginChange();
   //set logical direction to be backward
   CaretPosition = CaretPosition.GetPositionAtOffset(0, LogicalDirection.Backward);
   CaretPosition.InsertTextInRun(" "); // Insert space
   CaretPosition = CaretPosition.GetNextInsertionPosition(LogicalDirection.Forward);
   e.Handled = true;
   EndChange();
}

可以插入其他字符,如"{","}",…有相同的行为