我想在 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
文档:这是许多 RTF 解析器之一:
关于wpf - 如何防止某些类型的格式被粘贴到 WPF RichTextBox 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048160/