在很多情况下,您需要 TextBox 高度是静态的(即其默认值)。问题是当用户被允许在提供的滚动方法中放入无限的字符串时,它不是那么友好。
到目前为止,我设法做的是:
<ScrollViewer x:Name="Scroller" MaxWidth="416" HorizontalScrollBarVisibility="Hidden">
<TextBox x:Name="Tb" TextChanged="TextBox_OnTextChanged" Background="{x:Null}" FontSize="25" MaxWidth="2048"/>
</ScrollViewer>
以及背后的代码:
private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e)
{
// if cursor is at the end of the text, scroll the ScrollViewer to the end
if (Tb.SelectionStart == Tb.Text.Length)
{
Scroller.ScrollToVerticalOffset(Tb.ActualHeight);
return;
}
// else scroll to the appropriate spot
if (!((Tb.SelectionStart * (Tb.ActualWidth / Tb.Text.Length) - Scroller.HorizontalOffset) < Scroller.ViewportWidth))
{
Scroller.ScrollToHorizontalOffset((Tb.SelectionStart) * (Tb.ActualWidth / Tb.Text.Length) - (Scroller.ViewportWidth - 55));
}
}
然而,这还不稳固。当 Tb.ActualWidth 达到其限制并且在文本中间移动插入符号时的滚动体验与 Bing 搜索框不同时,它会出现问题。
有没有办法在 Windows Phone 8 上添加与 Bing 搜索框或 IE 中的地址栏相同的功能?