views:

2784

answers:

2

Hi, I have this RTF text:

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

How to set this text into WPF RichTextBox?


Solution:

        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.

A: 

Simply use 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;
J. Random Coder
That works for the WinForms RichTextBox
Henk Holterman
Oh my bad. I missed you where using WPF.
J. Random Coder
+3  A: 

Do you really have to start with a string?

One method to load RTF is this:

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

You probably should call SelectAll() before that if you want to replace existing text.

So, worst case, you'll have to write your string to a MemoryStream and then feed that stream to the Load() method. Don't forget to Position=0 in between.

But I'm waiting to see somebody to come up with something more elegant.

Henk Holterman
rtfBox.Selection.Load is what I needed. Thank you :)
Andrija
Instead of using the `Selection` property and worrying about calling SelectAll, you can probably use `new TextRange( rtfBox.Document.ContentStart, rtfBox.Document.ContentEnd )` and then call Load on the TextRange (Selection is itself a TextRange).
chaiguy