FlowDocument
検索結果に基づいて、テキストの一部を強調表示したいと考えています。私がやっていることは、検索された単語がのテキストで発生するインデックスを取得FlowDocument
し、見つかったインデックスから始まり、見つかったインデックス + 検索語の長さで終わるテキスト範囲に背景色を適用することです。
TextRange content = new TextRange(myFlowDocument.ContentStart,
myFlowDocument.ContentEnd);
List<int> highlights = GetHighlights(content.Text, search);
foreach (int index in highlights)
{
var start = myFlowDocument.ContentStart;
var startPos = start.GetPositionAtOffset(index);
var endPos = start.GetPositionAtOffset(index + search.Length);
var textRange = new TextRange(startPos, endPos);
textRange.ApplyPropertyValue(TextElement.BackgroundProperty,
new SolidColorBrush(Colors.Yellow));
}
TextRange newRange = new TextRange(myFlowDocument.ContentStart,
newDocument.ContentEnd);
FlowDocument fd = (FlowDocument)XamlReader.Parse(newRange.Text);
問題は、ドキュメントのテキストでインデックスを検索しているのですが、返すときにFlowDocument
xaml タグが追加され、ハイライトが移動していることです。どうすれば修正できますか?