C#通用应用程序:以编程方式设置新文本后,自动滚动至文本框底部
如何在插入新文本后自动滚动到文本框底部?我已经读到它使用了.append方法。不幸的是,通用应用程序中不存在此方法。文本框是只读的 .xaml如下所示:C#通用应用程序:以编程方式设置新文本后,自动滚动至文本框底部,c#,uwp,windows-10-universal,C#,Uwp,Windows 10 Universal,如何在插入新文本后自动滚动到文本框底部?我已经读到它使用了.append方法。不幸的是,通用应用程序中不存在此方法。文本框是只读的 .xaml如下所示: { var stringBuilder = new StringBuilder(OutputTextBox.Text); stringBuilder.Append("sample text\n"); OutputTextBox.Text = stringBuilder.ToString(); } VerticalScroll
{
var stringBuilder = new StringBuilder(OutputTextBox.Text);
stringBuilder.Append("sample text\n");
OutputTextBox.Text = stringBuilder.ToString();
}
VerticalScrollBarVisibility="Visible" AllowDrop="False" ManipulationMode="Control"
在设置新文本后,尝试如下更改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);
});
或者使用ScrollViewer.ScrollToEnd()代码>
并添加到滚动查看此设置:
ScrollViewer.ChangeView(0.0f, double.MaxValue, 1.0f);
你有这样的经历:
{
var stringBuilder = new StringBuilder(OutputTextBox.Text);
stringBuilder.Append("sample text\n");
OutputTextBox.Text = stringBuilder.ToString();
}
VerticalScrollBarVisibility="Visible" AllowDrop="False" ManipulationMode="Control"
默认情况下有一个嵌入式。我们可以在这里找到它。无需再次将TextBox
放入另一个ScrollViewer
中
当需要时,使用滚轮或触摸可自动启用滚动。但是,默认情况下不显示垂直滚动条。您可以通过在嵌入式屏幕上将设置为Auto来显示垂直滚动条,如下所示
<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">
但是,在使用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;
}
}
private void ScrolltoBottom(文本框文本框)
{
var grid=(grid)VisualTreeHelper.GetChild(文本框,0);
对于(变量i=0;i
我已经试过ScrollViewer.ChangeView(0.0f,double.MaxValue,1.0f);但它不起作用,而且ScrollToEnd()不幸不存在;这是我也尝试过的。以及我发现的其他一些可能的解决方案。也许我只是想把最新的消息附加到文本框的开头。@mollwitz但是文本框文本是更新的吗?我更新了你可能必须做的事情。你是什么意思?对不起,我不明白。
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;
}
}