WPF RichTextBox查找指定中文字符串并改颜色
时间: 2023-11-21 15:05:14 浏览: 222
可以使用正则表达式来查找指定中文字符串,并通过设置字符格式来改变其颜色。以下是一个示例代码:
```csharp
private void HighlightChineseText(string searchText, Color highlightColor)
{
// 创建一个正则表达式,用于匹配中文字符
Regex regex = new Regex(@"[\u4e00-\u9fa5]+");
// 获取RichTextBox中所有文本内容的范围
TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
// 用于保存匹配到的文本范围和起始位置
List<Tuple<TextRange, int>> matches = new List<Tuple<TextRange, int>>();
// 在文本范围中查找匹配的中文字符串
TextPointer pointer = textRange.Start;
while (pointer != null)
{
if (pointer.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
MatchCollection matchCollection = regex.Matches(pointer.GetTextInRun(LogicalDirection.Forward));
foreach (Match match in matchCollection)
{
TextPointer start = pointer.GetPositionAtOffset(match.Index);
TextPointer end = start.GetPositionAtOffset(match.Length);
matches.Add(new Tuple<TextRange, int>(new TextRange(start, end), start.GetOffsetToPosition(textRange.Start)));
}
}
pointer = pointer.GetNextContextPosition(LogicalDirection.Forward);
}
// 为匹配到的文本范围设置字符格式,改变其颜色
foreach (var match in matches)
{
match.Item1.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(highlightColor));
}
}
```
在调用该方法时,传入要查找的字符串和要改变的颜色即可:
```csharp
string searchText = "中文字符串";
Color highlightColor = Colors.Red;
HighlightChineseText(searchText, highlightColor);
```
阅读全文