WPF RichTextBox附加彩色文本

时间:2011-04-01 11:48:54

标签: c# wpf colors richtextbox

我正在使用RichTextBox.AppendText函数向我的RichTextBox添加字符串。我想用特定的颜色设置它。我怎么能这样做?

6 个答案:

答案 0 :(得分:35)

试试这个:

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

答案 1 :(得分:14)

如果需要,您也可以将其作为扩展方法。

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

这样就可以做到这一点

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

或以十六进制表示,如

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

如果您键入的颜色字符串无效,则只需将其键入默认颜色(黑色)即可。 希望这有帮助!

答案 2 :(得分:1)

当心TextRange的开销

我花了很多时间把头发扯掉,因为TextRange对于我的用例来说不够快。这种方法避免了开销。我进行了一些准系统测试,测试速度提高了约10个(但请不要相信我,请运行您自己的测试)

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

Credit

注意:我认为大多数用例都可以与TextRange配合使用。我的用例涉及数百个单独的追加,并且这些开销堆积了。

答案 3 :(得分:1)

只是一个完整的例子,将原始问题与托尼之前的评论混合在一起

var paragraph = new Paragraph();
var run = new Run(message)    
{
    Foreground = someBrush
};
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);

现在,它又快又彩色:)

请注意(与 TextRange 解决方案不同)该解决方案还解决了我在 RichTextBox 的第一行出现的换行问题。

答案 4 :(得分:0)

以上单行答案:-

  myRichTextBox.AppendText("items", "CornflowerBlue")

不起作用。正确的写法是(我正在使用VS 2017):-

    Dim text1 As New TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd)
  myRichTextBox.AppendText("items")
  text1.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.CornflowerBlue) 

答案 5 :(得分:0)

我最终综合了 Omni 和 Kishores 的答案并创建了一个扩展方法:

public static void AppendText(this System.Windows.Controls.RichTextBox box, string text, SolidColorBrush brush)
{
    TextRange tr = new TextRange(box.Document.ContentEnd, box.Document.ContentEnd);
    tr.Text = text;
    tr.ApplyPropertyValue(TextElement.ForegroundProperty, brush);
}

可以这样称呼:

MyTextBox.AppendText("Some Text\n", Brushes.Green);