如何滚动到 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)
我还将该方法与事件处理程序分开,因为我不想每次更改文本时都必须滚动。
如果有人需要滚动到 UWP 应用中文本框的底部:
\n\nhttps://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867
\n\nprivate\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 归档时间: |
|
查看次数: |
3468 次 |
最近记录: |