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;
}
}
}
我有一个具有文本转语音功能的 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;
}
}
}