2013-01-18 4 views
7

मैं WinRT के लिए एक साधारण एप्लिकेशन लिख रहा हूं और मुझे अपने कोड में टेक्स्टबॉक्स के नीचे स्वचालित रूप से स्क्रॉल करने का तरीका ढूंढने में परेशानी हो रही है। मैं एक टेक्स्टबॉक्स में लॉग जानकारी लिख रहा हूं और इसे स्क्रॉल करना चाहता हूं ताकि बॉक्स में नवीनतम प्रविष्टियां दिखाई दे सकें, लेकिन कुछ भी काम नहीं करता है। नीचे कुछ बातें मैं कोशिश की है इस प्रकार हैं:WinRT में टेक्स्टबॉक्स के नीचे प्रोग्रामेटिक रूप से स्क्रॉल कैसे करें?

प्लेस एक ScrollViewer में पाठ बॉक्स:

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

पाठ बॉक्स में पिछले डेटा का चयन करें:

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

लेकिन कुछ भी नहीं मैं वास्तव में कारण बनता है स्क्रॉल करने के लिए प्रदर्शित पाठ ताकि नीचे डेटा दिखाई दे।

क्या किसी के पास कोई विचार है?

+0

ध्यान दें कि आप 'बुला रहे हैं बजाय' ScrollToVerticalOffset' और आप आप पाठ सेट करने के बाद पाठ बॉक्स के लेआउट के लिए प्रतीक्षा करने अपडेट करनी पड़ सकती की ScrollToHorizontalOffset'। –

+0

क्षमा करें, वास्तव में यह एक टाइपो था जब मैं यहां कोड का अनुवाद कर रहा था। मेरे वास्तविक कोड में मैंने "स्क्रॉलटॉवर्टिकल ऑफसेट" का उपयोग किया था। मैं अपनी मूल पोस्ट को सही कर रहा हूं। – Briggs

उत्तर

4

यह काम करता है:

XAML

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

सी #

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); 
संबंधित मुद्दे