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);
Note: I think most use cases should work fine with TextRange
. My use-case involved hundreds of individual appends, and that overhead stacks up.