当我添加新行时,如何将RichTextBox滚动到末尾?

Mer*_*rad 15 c# wpf xaml richtextbox

我有几个只读的RichTextBox用于记录输出.因为它们是只读的,所以当文本更新时它们似乎不会自动滚动.我可以使用TextChanged事件来强制滚动结束,但是不是简单地在XAML中设置属性或其他东西的方法,以便滚动像正常一样发生吗?

Pan*_*ank 19

我搜索了你的问题并发现了这篇文章.在"编写RichTextBox"一节中,作者描述了如何获得您期望的行为.

如果有任何用途,请检查并告诉我.


我试图重现你的问题,并想出了以下解决方案

    <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>
Run Code Online (Sandbox Code Playgroud)

后面的代码如下:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这解决了自动滚动的问题,请检查它,并告诉我它是否有任何帮助.

  • 它使滚动条可见,但在以编程方式添加文本时,它仍然不会滚动到文档的末尾.看起来我可能会遇到TextChanged事件. (3认同)

Sam*_*ack 14

我使用Interactivity触发器和一个非常简单的操作解决了这个问题.

该动作如下所示:

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

然后在我的XAML中我有这个:

<RichTextBox IsReadOnly="True" VerticalScrollBarVisibility="Auto">
     <i:Interaction.Triggers>
            <i:EventTrigger EventName="TextChanged">
                <interactivity:ScrollToBottomAction/>
            </i:EventTrigger>
     </i:Interaction.Triggers>
</RichTextBox>
Run Code Online (Sandbox Code Playgroud)