c# - 如何以编程方式滚动到 WinRT 中文本框的底部?

标签 c# windows-runtime

我正在为 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);

使用Winrt XAML Toolkit .

非工具包方式:

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/

相关文章:

c# - 为什么在 C# 接口(interface)类型中属性只能包含 setter?

c# - 检索绑定(bind)值的子字符串

mvvm - 在哪里可以找到 Caliburn.Micro 1.4 文档?

c++ - Windows::Storage::ApplicationData::Current 在 C++ 中找不到

windows-8 - Windows 运行时 UI 组件

asynchronous - 如何使用 IAsyncOperation 接口(interface)使用 WinRT 进行自己的异步操作?

c# - ASP.NET Repeater 控件复选框问题

c# - Citrix 7.6 代理 SDK C#/Powershell

c# - 获取WPF中单击的矩形的名称

wpf - Windows 8 WPF 应用程序