【问题标题】:Customize Undo Redo of a RichTextBox自定义 RichTextBox 的撤消重做
【发布时间】:2011-12-21 15:28:38
【问题描述】:

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

--> 在你输入文本之前:

myRichTextBox.BeginChange();

--> 你刚刚输入了一个空格:

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

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

【问题讨论】:

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


    【解决方案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();
    }
    

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

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      相关资源
      最近更新 更多