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);