私はRichTextBoxでFlowDocumentsを操作しています。具体的には、TextChangeイベントが発生したときにTextRangesとTextPointersを操作しています。
私はTextRangeにアクセスしています
TextChange change;
TextRange range = new TextRange(RichTextControl.Document.ContentStart, RichtextControl.Document.ContentEnd);
TextRange changeRange = new TextRange(range.Start.GetPositionAtOffset(change.Offset), range.Start.GetPositionAtOffset(change.Offset+change.AddedLength));
TextRangeは、複数の段落にまたがるスパンで作業する必要があります。選択範囲から抽出したTextRangeは、簡略化して次のようになります。
<Section>
<Paragraph>
<Span>
<Run>Test1</Run>
</Span>
</Paragraph>
<Paragraph>
<Span>
<Run>Test2</Run>
</Span>
</Paragraph>
</Section>
これで、を使用して最初の段落にアクセスできますTextRange.Start
。インラインにアクセスすることで、この段落を通常どおりトラバースできます。
ただし、2番目の段落にアクセスしたいので、すぐに選択肢がなくなります。私は見ることができますTextPointer.GetNextContextPosition
が、それは、ポインターが変更されるコンテキストまで、テキストポインターのオフセット位置をホッピングすることにつながります。これは、これを行う方法ではないことを願っています。
変更されたテキストを実際にキャプチャするのが間違っているのか、それともセクションに含まれるすべての段落をトラバースするための適切なインターフェイスがないのかはわかりません。もしそうなら、解決策は簡単なはずですが、私はそれを見ることができません。