UWP/C# 如何将文本从 TextBox 滚动到选定的文本?

UWP/C# How to scroll text from a TextBox to selected text?

我有一个具有文本转语音功能的 UWP 桌面应用程序。在其中,我有一个 TextBox 来包含将由语音合成器执行的文本。在执行期间,应用程序选择当前执行的短语。但是,由于文本比 TextBox 大,我需要滚动文本,以便用户可以看到执行和选择的短语。这该怎么做?欢迎任何帮助。

UWP/C# How to scroll text from a TextBox to selected text?

恐怕您无法使用 UWP 文本框滚动到特定位置。它看起来不包含 ScrollTo 方法。但是,您可以获得 TextBox 的内部 ScrollViewer 然后调用 ChangeView 方法滚动到您想要的位置。

例如

public void ScrollToSp(TextBox control, string text)
{
    var grid = (Grid)VisualTreeHelper.GetChild(control, 0);
    var position = control.Text.Contains(text);
    if (control.Text.Contains(text))
    {
        var index = control.Text.IndexOf(text);
        var rect =  control.GetRectFromCharacterIndex(index, true);

        for (var i = 0; i <= VisualTreeHelper.GetChildrenCount(grid) - 1; i++)
        {
            object obj = VisualTreeHelper.GetChild(grid, i);
            if (!(obj is ScrollViewer)) continue;
            ((ScrollViewer)obj).ChangeView(0.0f, rect.Top, 1.0f);
            break;
        }
    }         
}