我正在为 WinRT 编写一个简单的应用程序,但在我的代码中想出一种自动滚动到文本框底部的方法时遇到了麻烦。我正在将日志信息写入 TextBox 并希望它滚动以便最新条目在框中可见,但似乎没有任何效果。以下是我尝试过的一些事情:
将 TextBox 放在 ScrollViewer 中:
this.txtLog.Text = this.txtLog.Text + line + "\r\n";
ScrollToVerticallOffset(scrollView.ScrollableHeight);
选择TextBox中的最后一条数据:
this.txtLog.Select(this.txtLog.Text.Length, 0);
但实际上我所做的任何事情都不会导致显示的文本滚动,以便底部数据可见。
有没有人有什么想法?
最佳答案
这个有效:
XAML
<TextBox
x:Name="tb"....
C#
var sv = tb.GetFirstDescendantOfType<ScrollViewer>();
sv.ScrollToVerticalOffsetWithAnimation(sv.ExtentHeight - sv.ViewportHeight);
非工具包方式:
Func<DependencyObject, ScrollViewer> getFirstDescendantScrollViewer = null;
getFirstDescendantScrollViewer =
parent =>
{
var c = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < c; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
var sv = child as ScrollViewer;
if (sv != null)
return sv;
sv = getFirstDescendantScrollViewer(child);
if (sv != null)
return sv;
}
return null;
};
var tbsv = getFirstDescendantScrollViewer(tb);
tbsv.ScrollToVerticalOffset(tbsv.ScrollableHeight);
关于c# - 如何以编程方式滚动到 WinRT 中文本框的底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408408/