当我添加新行时,如何使RichTextBox滚动到最后?

时间:2012-04-25 02:12:35

标签: c# wpf xaml richtextbox

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

3 个答案:

答案 0 :(得分:18)

我搜索了你的问题并找到this帖子。 在“编写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>

背后的代码如下:

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();
        }
    }
}

这解决了自动滚动的问题,请检查一下,如果有任何帮助请告诉我。

答案 1 :(得分:14)

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

动作如下:

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

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

<RichTextBox IsReadOnly="True" VerticalScrollBarVisibility="Auto">
     <i:Interaction.Triggers>
            <i:EventTrigger EventName="TextChanged">
                <interactivity:ScrollToBottomAction/>
            </i:EventTrigger>
     </i:Interaction.Triggers>
</RichTextBox>

答案 2 :(得分:-1)

RichTextBox.AppendText("String")
RichTextBox.ScrollToCaret()

当我添加到RichTextBox.text时,ScrollToCaret()不起作用。

RichTextBox.text = RichTextBox.text + "String"
RichTextBox.ScrollToCaret()