Ik wil graag dat mijn meerlijnige textbox altijd de onderste inhoud toont door naar beneden te scrollen van zodra er nieuwe tekst wordt toegevoegd. Ik gebruikte hiervoor altijd:
Maar de scrollToCaret() methode is niet meer beschikbaar voor Windows 8 Metro applicaties. Ik heb al uren gezocht om een alternatieve oplossing en kwam uiteindelijk uit op dit topic: MSDN: Scrolling a Textbox
Ik probeerde de laatste suggestie uit, degene waarbij je het ScrollViewer object van de textbox zijn children moet halen door middel van een VisualTreeHelper en daarop de methode ScrollToVerticalOffset() op te roepen:
Ik probeerde dit maar het werkt niet. Na enkele debug-pogingen met breakpoints kwam ik tot de ontdekking dat txtM geen ScrollViewer 'Child' had. Het enige kind dat de textbox wel had was een Grid.
De scrollbars verschijnen wel en ik heb de ScrollViewer.VerticalScrollBarVisibility instelling van txtM op 'Auto' gezet in de xaml file.
Iemand die enig idee heeft wat er verkeerd loopt of een andere suggestie heeft om te scrollen?
Visual Basic .NET:
1
2
| TextBox1.SelectionStart = TextBox1.TextLength TextBox1.ScrollToCaret() |
Maar de scrollToCaret() methode is niet meer beschikbaar voor Windows 8 Metro applicaties. Ik heb al uren gezocht om een alternatieve oplossing en kwam uiteindelijk uit op dit topic: MSDN: Scrolling a Textbox
Ik probeerde de laatste suggestie uit, degene waarbij je het ScrollViewer object van de textbox zijn children moet halen door middel van een VisualTreeHelper en daarop de methode ScrollToVerticalOffset() op te roepen:
Visual Basic .NET:
1
| scrollToEndOfMultiLineTextbox(txtM) |
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
| Public Sub scrollToEndOfMultiLineTextbox(ByVal textbox As TextBox) For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(textbox) - 1 Dim obj As Object = VisualTreeHelper.GetChild(textbox, i) If TypeOf obj Is ScrollViewer Then CType(obj, ScrollViewer).ScrollToVerticalOffset(CType(obj, ScrollViewer).ExtentHeight) Exit For End If Next End Sub |
code:
1
2
3
| <TextBox x:Name="txtM" ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" Grid.Row="3" Margin="0,0,36,0" AcceptsReturn="True" IsReadOnly="True"/> |
Ik probeerde dit maar het werkt niet. Na enkele debug-pogingen met breakpoints kwam ik tot de ontdekking dat txtM geen ScrollViewer 'Child' had. Het enige kind dat de textbox wel had was een Grid.
De scrollbars verschijnen wel en ik heb de ScrollViewer.VerticalScrollBarVisibility instelling van txtM op 'Auto' gezet in de xaml file.
Iemand die enig idee heeft wat er verkeerd loopt of een andere suggestie heeft om te scrollen?