var paragraph = new Paragraph();
var run = new Run(message)
{
Foreground = someBrush
};
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);
private void AppendText(RichTextBox textBox,
string message,
SolidColorBrush fontColor,
SolidColorBrush backgroundColor)
{
// If a message contains line breaks, the code bellow will
// add an empty blank line for every line break in the message.
// To avoid that we have to replace all new lines in the mesage with '\r' symbol.
message = Regex.Replace(message, @"(\r\n)|(\n\r)|(\n)", "\r");
var textRange = new TextRange(textBox.Document.ContentEnd,
textBox.Document.ContentEnd) { Text = message };
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, fontColor);
textRange.ApplyPropertyValue(TextElement.BackgroundProperty, backgroundColor);
}
字符串
Demo
以下代码将显示消息,同时考虑新的线符号:
AppendText(_richTextBox, "First part of the line. ", Brushes.Green, Brushes.Yellow);
AppendText(_richTextBox, "Second part of the line. ", Brushes.Blue, Brushes.White);
AppendText(_richTextBox, "Third part that\ncontains new line in the middle\n", Brushes.LightPink, Brushes.Gray);
AppendText(_richTextBox, "New line\nNew line\nNew line", Brushes.Black, Brushes.White);
Dim text1 As New TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd)
myRichTextBox.AppendText("items")
text1.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.CornflowerBlue)
7条答案
按热度按时间nwnhqdif1#
试试这个
字符串
5gfr0r5j2#
如果你愿意,你也可以把它作为一个扩展方法。
字符串
这样你就可以
型
或十六进制,例如
型
如果您键入的颜色字符串无效,它只会以默认颜色(黑色)键入。希望这对你有帮助!
w8ntj3qf3#
注意TextRange的开销
我花了很多时间绞尽脑汁,因为
TextRange
对于我的用例来说不够快。此方法避免了开销。我运行了一些准系统测试,它的速度快了~10倍 (但不要相信我的话,哈哈,运行你自己的测试)字符串
Credit
**注意:**我认为大多数用例都可以很好地使用
TextRange
。我的用例涉及到数百个单独的追加,而这些开销叠加在一起。cotxawn74#
只是一个完整的例子,混合了原来的问题与以前的评论,从托尼
字符串
现在,它是快速和彩色的:)
kse8i1jr5#
我最终综合了Omni和Kishores的答案,并创建了一个扩展方法:
字符串
可以这样称呼:
型
q35jwt9p6#
我进一步改进了@Jack的回答:
编码
字符串
Demo
以下代码将显示消息,同时考虑新的线符号:
型
x1c 0d1x的数据
jexiocij7#
上面一行回答:
字符串
不起作用。正确的写法应该是(我用的是VS 2017):-
型