UWP/WinRT: Как прокрутить RichEditBox в позицию курсора?

Я реализовал функцию поиска в RichEditBox, которая при выполнении будет искать query и выберите найденный текст внутри 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 шляпа

Когда мой код ищет шляпу, он успешно выделит первый экземпляр слова шляпа. Тем не менее, RichEditBox не будет прокручивать вниз, даже если это за кадром. Во второй раз, когда код будет запущен, он выделит второй экземпляр и прокрутит экран вниз до первого экземпляра слова hat.

Я предполагаю, что в коде для RichEditBox есть ошибка, которая вызывает это. Есть ли какой-нибудь программный способ, которым я могу вручную прокрутить RichEditBox или его неявный ScrollViewer, чтобы вывести каретку в поле зрения?

1 ответ

Решение

Чтобы прокрутить выделенный текст в нужное положение, вам нужно использовать ScrollIntoView метод доступен на ITextRange интерфейс.

Другие вопросы по тегам