Как вы программно прокручиваете нижнюю часть TextBox в WinRT?

Я пишу простое приложение для WinRT, и у меня возникли проблемы с поиском способа автоматического прокрутки в нижней части TextBox в моем коде. Я пишу информацию журнала в TextBox и хотел бы, чтобы она прокручивалась так, чтобы новые записи были видны в поле, но ничего не работает. Ниже несколько вещей, которые я пробовал:

Поместите TextBox в ScrollViewer:

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

Выберите последние данные в текстовом поле:

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

Но ничто из того, что я действительно делаю, не вызывает прокрутку отображаемого текста, так что отображаются нижние данные.

Есть ли у кого-нибудь идеи?

1 ответ

Это работает:

XAML

<p> <span> С#</span></p> <pre class="prettyprint linenums">var sv = tb.GetFirstDescendantOfType<scrollviewer>(); sv.ScrollToVerticalOffsetWithAnimation(sv.ExtentHeight - sv.ViewportHeight); </scrollviewer></pre> <p>Это использует <a href="http://bit.ly/WinRTXamlToolkit" rel="nofollow noreferrer" target="_blank">Winrt XAML Toolkit</a>.</p> <p>Не-инструментарий:</p> <pre class="prettyprint linenums">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); </dependencyobject,></pre>

licensed under cc by-sa 3.0 with attribution.