How can I make a RichTextBox scroll to the end when I add a new line?

后端 未结 3 1358
半阙折子戏
半阙折子戏 2021-01-07 23:25

I have several read only RichTextBox\'s that are used for logging output. Since they\'re read only they don\'t seem to automatically scroll when the text is updated. I

相关标签:
3条回答
  • 2021-01-08 00:03

    I had googled for your problem and found this post. In the section "Programming the RichTextBox" author had described about getting the behavior what you had been expecting.

    Please check and let me know if it is of any use.


    I tried to reproduce your problem and came up with the following solution

        <Window x:Class="CheckRichTextBox.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="170" Width="300">
        <StackPanel>
            <RichTextBox Height="100" Name="richTextBox1" IsReadOnly="True" VerticalScrollBarVisibility="Visible"/>
            <Button Name="btnAdd" Content="Click me to add text" VerticalAlignment="Bottom" Click="BtnAddClick" />
        </StackPanel>
    </Window>
    

    The code behind for the same is as below:

    using System.Windows;
    
    namespace CheckRichTextBox
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void BtnAddClick(object sender, RoutedEventArgs e)
            {
                richTextBox1.AppendText("You had Clicked the button for adding text\n");
                richTextBox1.ScrollToEnd();
            }
        }
    }
    

    This solves the problem of autoscroll, please check it and let me know if it is of any help.

    0 讨论(0)
  • 2021-01-08 00:11

    I solved this problem using an Interactivity trigger and a very simple action.

    The action looks like this:

    public class ScrollToBottomAction : TriggerAction<RichTextBox>
    {
        protected override void Invoke(object parameter)
        {
            AssociatedObject.ScrollToEnd();
        }
    }
    

    Then in my XAML I have this:

    <RichTextBox IsReadOnly="True" VerticalScrollBarVisibility="Auto">
         <i:Interaction.Triggers>
                <i:EventTrigger EventName="TextChanged">
                    <interactivity:ScrollToBottomAction/>
                </i:EventTrigger>
         </i:Interaction.Triggers>
    </RichTextBox>
    
    0 讨论(0)
  • 2021-01-08 00:14
    RichTextBox.AppendText("String")
    RichTextBox.ScrollToCaret()
    

    When I was adding to RichTextBox.text, ScrollToCaret() does not work.

    RichTextBox.text = RichTextBox.text + "String"
    RichTextBox.ScrollToCaret()
    
    0 讨论(0)
提交回复
热议问题