Как вы программно прокручиваете нижнюю часть 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&lt;scrollviewer&gt;(); sv.ScrollToVerticalOffsetWithAnimation(sv.ExtentHeight - sv.ViewportHeight); &lt;/scrollviewer&gt;</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&lt;dependencyobject, scrollviewer=""&gt; getFirstDescendantScrollViewer = null; getFirstDescendantScrollViewer = parent =&gt; { var c = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i &lt; 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); &lt;/dependencyobject,&gt;</pre>

licensed under cc by-sa 3.0 with attribution.