gpt4 book ai didi

wpf - 如何防止某些类型的格式被粘贴到 WPF RichTextBox 中

转载 作者:行者123 更新时间:2023-12-04 17:57:57 32 4
gpt4 key购买 nike

我想在 WPF RichTextBox 中允许一些简单的格式化命令,但不允许其他命令。

我创建了一个工具栏,允许用户应用粗体或斜体,并使用项目符号或编号列表。 (基本上,我只想支持适合博客或维基的格式化命令。)

问题是用户可以执行剪切和粘贴操作,插入带有前景色和背景色的文本,以及其他类型的不允许的格式。这可能会导致令人讨厌的可用性问题,例如用户将白色文本粘贴到白色背景上。

有什么办法可以关闭这些高级格式化功能吗?如果没有,有没有办法可以拦截粘贴操作并删除我不想要的格式?

最佳答案

您可以像这样拦截粘贴操作:

    void AddPasteHandler()
{
DataObject.AddPastingHandler(richTextBox, new DataObjectPastingEventHandler(OnPaste));
}

void OnPaste(object sender, DataObjectPastingEventArgs e)
{
if (!e.SourceDataObject.GetDataPresent(DataFormats.Rtf, true)) return;
var rtf = e.SourceDataObject.GetData(DataFormats.Rtf) as string;
// Change e.SourceDataObject to strip non-basic formatting...
}

凌乱的部分是保留一些但不是全部的格式。 rtf变量将是一个 RTF 格式的字符串,您可以使用第三方库来解析它,使用类似 DOM 的模式遍历树,并发出只有文本、粗体和斜体的新 RTF。然后把它塞回 e.SourceDataObject或许多其他选项(请参阅下面的文档)。

这里是 PastingHandler文档:
  • DataObject.AddPastingHandler Method

  • 这是许多 RTF 解析器之一:
  • NRTFTree - A class library for RTF processing in C#
  • 关于wpf - 如何防止某些类型的格式被粘贴到 WPF RichTextBox 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048160/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com