在RichTextBox中格式化单词

我使用以下代码查找以“@”开头的每一行,并将其格式化为粗体:

foreach (var line in tweetText.Document.Blocks) { var text = new TextRange(line.ContentStart, line.ContentEnd).Text; line.FontWeight = text.StartsWith("@") ? FontWeights.Bold : FontWeights.Normal; } 

但是,我想使用代码来查找每个单词而不是以“@”开头的行,所以我可以格式化一个段落,如:

Blah blah blah @username blah blah blah blah @anotherusername

这可能会使用一些优化,因为我快速完成,但这应该让你开始

 private void RichTextBox_TextChanged(object sender, TextChangedEventArgs e) { tweetText.TextChanged -= RichTextBox_TextChanged; int pos = tweetText.CaretPosition.GetOffsetToPosition(tweetText.Document.ContentEnd); foreach (Paragraph line in tweetText.Document.Blocks.ToList()) { string text = new TextRange(line.ContentStart,line.ContentEnd).Text; line.Inlines.Clear(); string[] wordSplit = text.Split(new char[] { ' ' }); int count = 1; foreach (string word in wordSplit) { if (word.StartsWith("@")) { Run run = new Run(word); run.FontWeight = FontWeights.Bold; line.Inlines.Add(run); } else { line.Inlines.Add(word); } if (count++ != wordSplit.Length) { line.Inlines.Add(" "); } } } tweetText.CaretPosition = tweetText.Document.ContentEnd.GetPositionAtOffset(-pos); tweetText.TextChanged += RichTextBox_TextChanged; } 

我不知道您的具体要求,但我建议您不要使用RichtextBox进行语法高亮显示。 有一个很好的组件AvalonEdit可以很容易地用于此。 您可以在本文中阅读有关AvalonEdit的更多信息: http : //www.codeproject.com/Articles/42490/Using-AvalonEdit-WPF-Text-Editor

符合您要求的语法定义:

       

在此处输入图像描述

完整的演示项目可以在这里下载: http : //oberaffig.ch/stackoverflow/avalonEdit.zip