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

标签 wpf formatting richtextbox

我想在 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/

    相关文章:

    c# - 将 XAML 导入 WPF RichTextBox

    c# - 在 C# 中创建 RTF 文件的正确方法是什么?

    wpf - 在 WPF 中设置主题

    java - Intellij 代码格式化,方法名称换行

    android - 在 EditText 中自动格式化电话号码

    excel - 公式丢失日期格式

    forms - 使用 Dojo 富文本编辑器提交表单

    wpf - 哪种方法可能是打破大型 xaml 的最佳方法?

    c# - WebAPI 的 WPF 客户端 - 如何处理身份验证密码

    wpf - 如何让 WPF TextBlock 在多行上显示我的文本?