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