自定义撤消RichTextBox的重做

时间:2011-12-21 15:28:38

标签: c# wpf xaml c#-4.0 richtextbox

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

- >在键入文本之前:

myRichTextBox.BeginChange();

- >你刚输入一个空格:

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

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

1 个答案:

答案 0 :(得分:1)

覆盖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();
}

您可以插入其他字符,例如“{”,“}”,...以具有相同的行为。

这适合我。