query
実行時に RichEditBox 内の見つかったテキストを検索して選択する検索機能を RichEditBox に実装しました。
String^ docText;
currentRichEditBox->Document->GetText(Text::TextGetOptions::None, &docText);
start = currentRichEditBox->Document->Selection->EndPosition;
end = docText->Length();
int result = newRange->FindText(query, end-start, Text::FindOptions::None);
if (result != 0)
{
currentRichEditBox->Document->Selection->SetRange(newRange->StartPosition, newRange->EndPosition);
}
これは、見つかったテキストが適切に選択されているという点で機能します。ただし、コンテンツがスクロールするほど長い RichEditBox の場合、これは画面外になり、RichEditBox はスクロールして表示されません。しかし、奇妙なことに、このコードを再実行すると、スクロールして前の結果が表示されます。たとえば、次のテキストを見てください。
これはテストです
【画面終了】
帽子1個
2 帽子
コードで hat を検索すると、hat という単語の最初のインスタンスが強調表示されます。ただし、RichEditBox は画面外にあるにもかかわらず下にスクロールしません。コードが 2 回目に実行されると、2 番目のインスタンスが強調表示され、画面が単語 hat の最初のインスタンスまでスクロールされます。
これを引き起こしている RichEditBox のコードにバグがあると思います。RichEditBox またはその暗黙の ScrollViewer を手動でスクロールしてキャレットを表示するプログラム的な方法はありますか?