Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#通用应用程序:以编程方式设置新文本后,自动滚动至文本框底部_C#_Uwp_Windows 10 Universal - Fatal编程技术网

C#通用应用程序:以编程方式设置新文本后,自动滚动至文本框底部

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

如何在插入新文本后自动滚动到文本框底部?我已经读到它使用了.append方法。不幸的是,通用应用程序中不存在此方法。文本框是只读的

.xaml如下所示:

{
   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;
    }
}