UWP/WinRT: 如何将RichEditBox滚动到光标位置?

UWP/WinRT: How to scroll a RichEditBox to the cursor position?

我在 RichEditBox 上实现了一个查找功能,执行时将搜索 query 和 select 在 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);
}

这行得通,因为找到的文本已正确 selected。但是,对于内容长到可以滚动的 RichEditBox,这将在屏幕外并且 RichEditBox 不会滚动以使其进入视图。然而,奇怪的是,如果这段代码是 re-运行 那么它将滚动到查看先前的结果。例如,采用以下文本:

This is a test

[Screen end]

1 hat

2 hat

当我的代码搜索 hat 时,它会成功突出显示单词 hat 的第一个实例。但是,RichEditBox 不会向下滚动到它,即使它在屏幕外也是如此。第二次代码是 运行,它会突出显示第二个实例并将屏幕向下滚动到单词 hat 的第一个实例。

我假设 RichEditBox 的代码中存在错误导致了此问题。是否有任何编程方式可以手动滚动 RichEditBox 或其隐式 ScrollViewer 以将插入符号显示在视图中?

要将突出显示的文本滚动到位,您需要使用 ITextRange 界面上提供的 ScrollIntoView 方法。