WPF的RichTextBox中查找字符串位置

已经琢磨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;
        }

原文地址:https://www.cnblogs.com/xiarifeixue/p/1905157.html