{
var stringBuilder = new StringBuilder(OutputTextBox.Text);
stringBuilder.Append("sample text\n");
OutputTextBox.Text = stringBuilder.ToString();
}
如何在插入新文本后自动滚动到文本框的底部?我已经读过它已经使用了.append方法。不幸的是,这种方法在通用应用中并不存在。文本框是只读的。
.xaml看起来像这样:
<ScrollViewer Name="ScrollViewer" HorizontalAlignment="Left" Height="175" VerticalAlignment="Top" Width="337" RenderTransformOrigin="1.774,9.9" Margin="95,95,-370,-223">
<TextBox x:Name="OutputTextBox" HorizontalAlignment="Left" Height="175" VerticalAlignment="Top" Width="337" RenderTransformOrigin="1.774,9.9" TextWrapping="Wrap" AcceptsReturn="True" IsReadOnly="True"/>
</ScrollViewer>
我试图做的是:
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var stringBuilder = new StringBuilder(OutputTextBox.Text);
stringBuilder.Append("sample text\n");
OutputTextBox.Text = stringBuilder.ToString();
ScrollViewer.ChangeView(0.0f, double.MaxValue, 1.0f);
});
答案 0 :(得分:3)
TextBox嵌入了ScrollViewer。我们可以在TextBox styles and templates找到它。无需再次将TextBox
放入另一个ScrollViewer
。
在需要时自动启用使用滚轮或触摸滚动。但是,默认情况下不显示垂直滚动条。您可以通过在嵌入式ScrollViewer.VerticalScrollBarVisibility上将ScrollViewer设置为自动来显示垂直滚动条,如下所示。
<TextBox AcceptsReturn="True" TextWrapping="Wrap" MaxHeight="172" Width="300" Header="Description" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
有关详细信息,请参阅TextBox class的备注中的启用多行输入部分。
因此,要滚动到TextBox的底部,我们可以首先获取嵌入的ScrollViewer
,然后使用ChangeView滚动TextBox中的文本。以下是一个简单的例子:
private void ScrolltoBottom(TextBox textBox)
{
var grid = (Grid)VisualTreeHelper.GetChild(textBox, 0);
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(grid); i++)
{
object obj = VisualTreeHelper.GetChild(grid, i);
if (!(obj is ScrollViewer)) continue;
((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f);
break;
}
}
但是,使用ChangeView
方法时出现问题,我们在TextBox
中使用此方法后无法使用滚轮滚动或触摸。作为解决方法,我们可以临时使用ScrollViewer.ScrollToVerticalOffset method。
private void ScrolltoBottom(TextBox textBox)
{
var grid = (Grid)VisualTreeHelper.GetChild(textBox, 0);
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(grid); i++)
{
object obj = VisualTreeHelper.GetChild(grid, i);
if (!(obj is ScrollViewer)) continue;
//((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f);
((ScrollViewer)obj).ScrollToVerticalOffset(((ScrollViewer)obj).ExtentHeight);
break;
}
}
答案 1 :(得分:0)
设置新文本后,请尝试在ScrollViewer上更改视图:
ScrollViewer.ChangeView(0.0f, double.MaxValue, 1.0f);
或使用ScrollViewer.ScrollToEnd();
并向ScrollView添加以下设置:
VerticalScrollBarVisibility="Visible" AllowDrop="False" ManipulationMode="Control"
你喜欢这个:
<ScrollViewer Name="ScrollViewer" HorizontalAlignment="Left" Height="175" VerticalAlignment="Top" Width="337" RenderTransformOrigin="1.774,9.9" Margin="95,95,-370,-223" VerticalScrollBarVisibility="Visible" AllowDrop="False" ManipulationMode="Control">