2013-01-18 59 views
7

我正在爲WinRT編寫一個簡單的應用程序,我無法找到一種方法來自動滾動到我的代碼中的TextBox底部。我正在寫日誌信息到一個文本框,並希望它滾動,使最新的條目在框中可見,但似乎沒有任何工作。以下是我已經嘗試了幾件事情:如何以編程方式滾動到WinRT中TextBox的底部?

放置在一個ScrollViewer中的文本框:

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

選擇在TextBox的最後一個數據:

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

但沒有什麼我的確會導致顯示文本滾動,以便底部數據可見。

有沒有人有任何想法?

+0

請注意,您所呼叫'ScrollToHorizo​​ntalOffset',而不是'ScrollToVerticalOffset',你可能需要等待文本框的佈局,以更新您設置的文本之後。 –

+0

對不起,當我將代碼翻譯到此處時,實際上是一個錯字。在我的實際代碼中,我使用了「ScrollToVerticalOffset」。我正在糾正我原來的帖子。 – Briggs

回答

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); 
相關問題