WPF RichTextBox - 删除粘贴上的文本格式并正确移动插入符号
WPF RichTextBox - Remove text formatting on paste and move caret properly
我在将某些格式化文本粘贴到 RichTextBox 时无法删除格式(粗体、字体、大小等)。
我已经成功地使用了以下内容:
- 向 RichTextBox 添加粘贴处理程序
DataObject.AddPastingHandler(RichTextBoxControl, TextBoxPasting);
- 删除格式并插入文本
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)
为您提供没有任何格式的纯文本。插入符号将正确移动,因为您没有取消应该移动它的事件。
我在将某些格式化文本粘贴到 RichTextBox 时无法删除格式(粗体、字体、大小等)。
我已经成功地使用了以下内容:
- 向 RichTextBox 添加粘贴处理程序
DataObject.AddPastingHandler(RichTextBoxControl, TextBoxPasting);
- 删除格式并插入文本
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)
为您提供没有任何格式的纯文本。插入符号将正确移动,因为您没有取消应该移动它的事件。