WPF RichTextBox - 删除粘贴上的文本格式并正确移动插入符号

WPF RichTextBox - Remove text formatting on paste and move caret properly

我在将某些格式化文本粘贴到 RichTextBox 时无法删除格式(粗体、字体、大小等)。

我已经成功地使用了以下内容:

  1. 向 RichTextBox 添加粘贴处理程序

DataObject.AddPastingHandler(RichTextBoxControl, TextBoxPasting);

  1. 删除格式并插入文本
private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
{
   var pastingText = e.DataObject.GetData(DataFormats.Text) as string;
   RichTextBoxControl.Document.ContentEnd.InsertTextInRun(pastingText);
   e.CancelCommand();
}

但不幸的是,这总是将插入的文本放在 RichTextBox 的末尾。插入符号也没有移动。

假设您处于这个位置:

Helloꕯ World 如果你粘贴 Beautiful 你会得到 Helloꕯ World Beutiful 而不是 Hello Beutifulꕯ World.

无需手动插入文本并取消事件,您只需更改要插入 DataObjectPastingEventArgs 中的文本,然后让事件链为您完成所有工作。

private static void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
{
   e.DataObject = new DataObject(DataFormats.Text, e.DataObject.GetData(DataFormats.Text) as string ?? string.Empty);
}

e.DataObject.GetData(DataFormats.Text) 为您提供没有任何格式的纯文本。插入符号将正确移动,因为您没有取消应该移动它的事件。