2013-01-18 14 views
7

WinRT için basit bir uygulama yazıyorum ve kodumdaki bir TextBox'ın altına otomatik olarak kaydırmanın bir yolunu bulmakta zorlanıyorum. Bir TextBox'a günlük bilgisi yazıyorum ve en yeni girişlerin kutuda görünmesini sağlayacak şekilde kaydırılmasını istiyorum, ancak hiçbir şey işe yaramıyor gibi görünüyor. Aşağıda denedim birkaç şey vardır:WinRT'deki bir TextBox'ın alt kısmına nasıl programlanır?

Place ScrollViewer TextBox:

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

son TextBox verileri seçin:

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

Ama hiçbir şey aslında neden yok Alttaki verilerin görülebilmesi için metin kaydırılır.

Herhangi bir fikri olan var mı?

+0

Not. –

+0

Üzgünüm, bu kodu buraya çevirdiğimde yazım hatasıydı. Gerçek kodumda "ScrollToVerticalOffset" kullandım. Orijinal gönderimi düzeliyorum. – Briggs

cevap

4

Bu çalışır:

XAML Winrt XAML Toolkit kullanır

<TextBox 
    x:Name="tb".... 

C#

var sv = tb.GetFirstDescendantOfType<ScrollViewer>(); 
sv.ScrollToVerticalOffsetWithAnimation(sv.ExtentHeight - sv.ViewportHeight); 

.

Sigara araç yolu: Eğer `yerine ScrollToVerticalOffset` ve size Metin ayarladıktan sonra güncellemek için metin kutusunun düzeni için beklemeniz gerekebilir` arasında ScrollToHorizontalOffset` aradığınız

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); 
İlgili konular