UWP C# 滚动到文本框底部

Car*_*oza 5 c# windows-10 uwp

如何滚动到 UWP 应用的文本框底部?

随着我向 UWP 的过渡,这一直是我遇到的问题之一。

我以前可以用这个:

textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于 UWP 应用

小智 6

使用https://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867中的答案有时会导致向上滚动时删除行。

要解决这个问题,请尝试以下操作:

private void ScrollToBottom(TextBox textBox)
{
    var grid = (Grid)VisualTreeHelper.GetChild(textBox, 0);
    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, ((ScrollViewer)obj).ExtentHeight, 1.0f, true);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

主要区别是这一行:

((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f, true);
Run Code Online (Sandbox Code Playgroud)

我还将该方法与事件处理程序分开,因为我不想每次更改文本时都必须滚动。

  • 这也可以用于 ScrollToCaret。您用行终止符分割字符串,以便获得总行数,遍历字符串的字符,直到计算行结尾,直到到达文本 SelectionStart 位置,然后将总行数除以它所在的行。您可以使用该百分比来乘以 ExtentHeight 和繁荣,您就在插入符号处。 (2认同)

Car*_*oza 5

如果有人需要滚动到 UWP 应用中文本框的底部:

\n\n

https://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867

\n\n
private\xc2\xa0void\xc2\xa0TextBox_TextChanged(object\xc2\xa0sender,\xc2\xa0TextChangedEventArgs\xc2\xa0e)\xc2\xa0\n{\xc2\xa0\n    var\xc2\xa0grid\xc2\xa0=\xc2\xa0(Grid)VisualTreeHelper.GetChild(textBox1,\xc2\xa00);\xc2\xa0\n    for\xc2\xa0(var\xc2\xa0i\xc2\xa0=\xc2\xa00;\xc2\xa0i\xc2\xa0<=\xc2\xa0VisualTreeHelper.GetChildrenCount(grid)\xc2\xa0-\xc2\xa01;\xc2\xa0i++)\xc2\xa0\n        {\xc2\xa0\n            object\xc2\xa0obj\xc2\xa0=\xc2\xa0VisualTreeHelper.GetChild(grid,\xc2\xa0i);\xc2\xa0\n            if\xc2\xa0(!(obj\xc2\xa0is\xc2\xa0ScrollViewer))\xc2\xa0continue;\xc2\xa0\n            ((ScrollViewer)obj).ChangeView(0.0f,\xc2\xa0((ScrollViewer)obj).ExtentHeight,\xc2\xa01.0f);\xc2\xa0\n            break;\xc2\xa0\n        }\xc2\xa0\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 textBox1 是要滚动到底部的文本框。

\n