C# 附加彩色文本的WPF RichTextBox

C# 附加彩色文本的WPF RichTextBox,c#,wpf,colors,richtextbox,C#,Wpf,Colors,Richtextbox,我正在使用RichTextBox.AppendText函数向我的RichTextBox添加字符串。我想给这个加上一种特殊的颜色。我该怎么做?试试这个: TextRange tr = new TextRange(rtb.Document.ContentEnd,­ rtb.Document.ContentEnd); tr.Text = "textToColorize"; tr.ApplyPropertyValue(TextElement.­ForegroundProperty, Brushes.Re

我正在使用
RichTextBox.AppendText
函数向我的
RichTextBox
添加字符串。我想给这个加上一种特殊的颜色。我该怎么做?

试试这个:

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

如果需要,还可以将其作为扩展方法

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");
如果您键入的颜色字符串无效,它只需将其键入默认颜色(黑色)。
希望这有帮助

以上单行答案:-

  myRichTextBox.AppendText("items", "CornflowerBlue")
不起作用。正确的书写方式是(我使用的是VS 2017):-

注意TextRange的开销 我花了很多时间,因为
TextRange
对于我的用例来说不够快。这种方法避免了开销。我运行了一些裸体测试,速度快了约10倍(但不要相信我的话,哈哈,运行您自己的测试)


注意:我认为大多数用例应该可以很好地使用
TextRange
。我的用例涉及到数百个单独的附件,而这些开销会堆积起来。

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

var段落=新段落();
var run=新运行(消息)
{
前景=一些画笔
};
段落.内联线.添加(运行);
myRichTextBox.Document.Blocks.Add(段落);
现在,它是快速和彩色的:)


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

我最终综合了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);

如果这是对我上述答案的回应,您还必须包括扩展方法定义才能使用它。您没有理解omni创建了一个允许传递颜色名称的扩展方法。颜色更改对于随后调用内置
AppendText(text)
方法添加的文本仍然有效。如果将附加的文本颜色重置为控件的前景,可能会更好。(请参阅。)有没有一种方法可以给跑步路线上色(如问题所问)?
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);