如何防止某些格式被粘贴到WPF RichTextBox中

dth*_*her 5 wpf formatting richtextbox

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

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

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

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

Ric*_*key 5

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

    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...
    }
Run Code Online (Sandbox Code Playgroud)

凌乱的部分是保留一些但不是全部的格式.该rtf变量将是RTF格式的字符串,您可以使用第三方库进行解析,使用类似DOM的模式遍历树,并使用文本,粗体和斜体发出新的RTF.然后将其重新填入e.SourceDataObject或其他一些选项(请参阅下面的文档).

这是PastingHandler文档:

这是许多RTF解析器之一: