繁体   English   中英

自定义RichTextBox的撤消重做

[英]Customize Undo Redo of a RichTextBox

有没有一种方法可以设置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();
}

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

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM