我有这个RTF文本:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;\red255\green0\blue0;}
\viewkind4\uc1\pard\qc\cf1\fs16 test \b bold \cf2\b0\i italic\cf0\i0\fs17
\par }
如何将此文字设置为WPF RichTextBox?
解决方案:
public void SetRTFText(string text)
{
MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(text));
this.mainRTB.Selection.Load(stream, DataFormats.Rtf);
}
答案 0 :(得分:38)
你真的必须从字符串开始吗?
加载RTF的一种方法是:
rtfBox.Selection.Load(myStream, DataFormats.Rtf);
如果要替换现有文本,可能应该在此之前调用SelectAll()。
因此,最糟糕的情况是,您必须将字符串写入MemoryStream,然后将该流提供给Load()方法。不要忘记介于两者之间的位置=。
但是我等着看到有人想出更优雅的东西。
答案 1 :(得分:6)
创建扩展方法
public static void SetRtf(this RichTextBox rtb, string document)
{
var documentBytes = Encoding.UTF8.GetBytes(document);
using (var reader = new MemoryStream(documentBytes))
{
reader.Position = 0;
rtb.SelectAll();
rtb.Selection.Load(reader, DataFormats.Rtf);
}
}
然后你可以做WinForm风格的
richTextBox1.SetRtf(rtf);
答案 2 :(得分:1)
我通过扩展RichTextBox类来编写一个非常灵活的解决方案,以允许绑定到实际的富文本文件。
我遇到了这个问题/答案,但并没有真正得到我想要的东西,所以希望我学到的东西能帮助那些将来读这篇文章的人。
Loading a RichTextBox from an RTF file using binding or a RichTextFile control
答案 3 :(得分:1)
string rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}} {\colortbl ;\red0\green0\blue0;\red255\green0\blue0;} \viewkind4\uc1\pard\qc\cf1\fs16 test \b bold \cf2\b0\i italic\cf0\i0\fs17 \par } ";
richTextBox1.Rtf = rtf;
一切正常
答案 4 :(得分:-2)
编辑:此答案假定使用WinForms而不是WPF。
只需使用RichTextBox.Rtf:
string rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}} {\colortbl ;\red0\green0\blue0;\red255\green0\blue0;} \viewkind4\uc1\pard\qc\cf1\fs16 test \b bold \cf2\b0\i italic\cf0\i0\fs17 \par } ";
richTextBox1.Rtf = rtf;