7

WinRT 用の単純なアプリケーションを作成していますが、コード内の TextBox の一番下まで自動的にスクロールする方法がわかりません。ログ情報を TextBox に書き込んでいて、スクロールして最新のエントリがボックスに表示されるようにしたいのですが、何も機能していないようです。以下に、私が試したいくつかのことを示します。

TextBox を ScrollViewer に配置します。

this.txtLog.Text = this.txtLog.Text + line + "\r\n";
ScrollToVerticallOffset(scrollView.ScrollableHeight);

TextBox の最後のデータを選択します。

this.txtLog.Select(this.txtLog.Text.Length, 0);

しかし、実際に表示されたテキストをスクロールさせて、下部のデータが表示されるようにすることは何もしていません。

誰にもアイデアはありますか?

4

1 に答える 1

4

これは機能します:

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);
于 2013-01-18T22:12:20.300 に答える