我正在使用 RichTextBox 创建一个具有简单语法突出显示的编辑器。突出显示自身的过程是使用以下函数实现的:
TextRange documentRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
documentRange.ClearAllProperties();
.......
tags.Sort((i, j) => i.Level > j.Level ? 1 : i.Level == j.Level ? 0 : -1);
Color []_colors=new Color[]{Colors.Blue,Colors.Brown,Colors.BlueViolet,Colors.Crimson,Colors.DarkBlue,
Colors.Green,Colors.DimGray,Colors.DarkGray,Colors.Maroon,Colors.Navy,Colors.Red};
foreach (var tag in tags)
{
TextRange range = new TextRange(tag.StartPosition, tag.EndPosition);
range.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(_colors[tag.Level%_colors.Length]));
range.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
}
问题是,当我使用这种方法时,当文本中有很多关键字时,应用程序的性能会受到很大影响,尤其是每次 RichTextBoxe 的文本更改时我都会这样做。
我运行分析器,似乎应用程序在 documentRange.ClearAllProperties() 中花费了一半的处理器时间。
我应该改变什么来提高应用程序的持久性?
谁能提供一个使用 WPF RichTextBox 快速突出显示语法的好例子?