如何从RichTextBox获取RTF

13

如何获取RichTextBox中的RTF文本?我正在尝试像这样获取,但该属性不存在。

RichTextBox rtb = new RichTextBox();
string s = rtb.Rtf;
2个回答

19

要获取RichTextBox用户实际创建的XAML:

   TextRange tr = new TextRange(myRichTextBox.Document.ContentStart,
                                myRichTextBox.Document.ContentEnd);
   MemoryStream ms = new MemoryStream();
   tr.Save(ms, DataFormats.Xaml);
   string xamlText = ASCIIEncoding.Default.GetString(ms.ToArray());

编辑:我手头没有代码可以测试,但是 TextRange 类型的一个实例有一个Save方法(用于流式保存),它接受一个DataFormats参数,可以是DataFormats.Rtf


1
DataFormats 包含一个 Rtf 成员。也许这种方法会起作用。 - Michaël Carpentier
现在,我该如何设置RichTextBox的RTF文本? - rpf
2
几件事情:1)我建议在你的MemoryStream周围添加一个using -- 从技术上讲,它实现了IDisposable,尽管如果你省略它似乎不会导致内存泄漏。2)你是正确的,tr.Save(ms, DataFormats.Rtf);是你需要的RTF数据(XAML很有趣,但它不是RTF)。此外,对于将数据复制到剪贴板的读者,请使用Clipboard.SetText(rtfText, TextDataFormat.Rtf) - jrh

4

有两个RichTextBox类,一个来自winforms框架,另一个来自WPF框架:

System.Windows.Controls.RichTextBox wpfBox;
System.Windows.Forms.RichTextBox winformsBox;

只有Winforms RichTextBox有一个Rtf属性,其他的都有一个包含FlowDocument的Document属性。

3
是的,我知道...从文档属性中,我该如何获取RTF文本? - rpf
你应该考虑将FlowDocument转换为RTF字符串,因为WPF控件的内容是FlowDocument而不是RTF。但我不知道如何实现这一点。 - Wouter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接