WPF RichTextBox appending coloured text WPF RichTextBox appending coloured text wpf wpf

WPF RichTextBox appending coloured text


Just try this:

TextRange tr = new TextRange(rtb.Document.ContentEnd,­ rtb.Document.ContentEnd);tr.Text = "textToColorize";tr.ApplyPropertyValue(TextElement.­ForegroundProperty, Brushes.Red);


If you want, you can also make it an extension method.

public static void AppendText(this RichTextBox box, string text, string color){    BrushConverter bc = new BrushConverter();    TextRange tr = new TextRange(box.Document.ContentEnd, box.Document.ContentEnd);    tr.Text = text;    try     {         tr.ApplyPropertyValue(TextElement.ForegroundProperty,             bc.ConvertFromString(color));     }    catch (FormatException) { }}

This will make it so you can just do

myRichTextBox.AppendText("My text", "CornflowerBlue");

or in hex such as

myRichTextBox.AppendText("My text", "0xffffff");

If the color string you type is invalid, it simply types it in the default color (black).Hope this helps!


Be Aware of TextRange's Overhead

I spent a lot of time tearing my hair out, because TextRange wasn't fast enough for my use-case. This method avoids the overhead. I ran some barebones tests, and its faster by a factor of ~10 (but don't take my word for it lol, run your own tests)

Paragraph paragraph = new Paragraph();Run run = new Run("MyText");paragraph.Inlines.Add(run);myRichTextBox.Document.Blocks.Add(paragraph);

Credit

Note: I think most use cases should work fine with TextRange. My use-case involved hundreds of individual appends, and that overhead stacks up.