已经琢磨2天了,一直没明白如何在WPF的RichTextBox中查找一个字符串的位置,最后在google上找到了一个牛人的解决办法,收藏过来,留着备用。
private List<TextRange> FindAllMatchedTextRanges(RichTextBox richBox, string keyword)
{
List<TextRange> trList = new List<TextRange>();
//设置文字指针为Document初始位置
TextPointer position = richBox.Document.ContentStart;
while (position != null)
{
//向前搜索,需要内容为Text
if (position.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
//拿出Run的Text
string text = position.GetTextInRun(LogicalDirection.Forward);
//可能包含多个keyword,做遍历查找
int index = 0;
while (index < text.Length)
{
index = text.IndexOf(keyword, index);
if (index == -1)
{
break;
}
else
{
//添加为新的Range
TextPointer start = position.GetPositionAtOffset(index);
TextPointer end = start.GetPositionAtOffset(keyword.Length);
trList.Add(new TextRange(start, end));
index += keyword.Length;
}
}
}
//文字指针向前偏移
position = position.GetNextContextPosition(LogicalDirection.Forward);
}
return trList;
}