2009-09-02 123 views
26

我有这样的RTF文本:设置RTF文本WPF RichTextBox控件

{\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); 
} 

Thanks for help from Henk Holterman.

+0

仅有1句话,你确定你想ASCII编码?它可能只是UTF8或默认通常更有意义。 – 2009-09-02 16:35:17

+0

是的,如果我有,ASCII编码是我需要使用的。谢谢你的提示:) – 2009-09-02 17:12:38

+0

实际上,你不**使用这个代码使用ASCII编码......'Default'实际上是指'Encoding.Default',所以它是系统的默认ANSI代码页。注意通过派生类访问静态成员,这往往是误导。 – 2013-12-31 10:42:58

回答

33

你真的要开始一个字符串?

一种方法来加载RTF是这样的:

rtfBox.Selection.Load(myStream, DataFormats.Rtf); 

你或许应该致电前全选()如果要替换现有文本。因此,最糟糕的情况是,您必须将字符串写入MemoryStream,然后将该数据流送入Load()方法。不要忘记在两者之间的位置= 0。

但我在等待看到有人想出更优雅的东西。

+0

rtfBox.Selection.Load是我所需要的。谢谢:) – 2009-09-02 15:27:23

+8

代替使用'Selection'属性并担心调用SelectAll,您可能可以使用'新的TextRange(rtfBox.Document.ContentStart,rtfBox.Document.ContentEnd)',然后在TextRange上调用Load(Selection is本身是一个TextRange)。 – devios1 2010-06-01 01:51:26

+0

with devios's snippet,this works:'TextRange textRange = new TextRange(rtfBox.Document.ContentStart,rtfBox.Document.ContentEnd); MemoryStream ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(rtfText)); textRange.Load(ms,DataFormats.Rtf);' – 2016-02-02 16:05:20

-2

只需使用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; 
+1

这适用于WinForms RichTextBox – 2009-09-02 12:11:16

+0

哦,我的不好。我想你在哪里使用WPF。 – 2009-09-02 12:22:11

+0

你回答帮助我,所以投票。 – 2011-09-13 08:48:26

4

创建一个扩展方法

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);

+0

您不能使用扩展方法作为属性。 – 2012-12-09 19:23:03