У меня есть только чтение RichTextBox только для чтения. Поскольку они прочитаны только, они не отображаются автоматически, когда текст обновляется. Я могу использовать событие TextChanged для принудительного завершения прокрутки, но разве не просто способ установить свойство или что-то в XAML, чтобы прокрутка происходила, как обычно?
Как я могу сделать прокрутку RichTextBox до конца, когда я добавляю новую строку?
Ответ 1
У меня была проблема с Google, и я нашел эту статью. В разделе "Программирование 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();
}
}
}
Это решает проблему автопрокрутки, пожалуйста, проверьте ее и сообщите мне, если это поможет.
Ответ 2
Я решил эту проблему, используя 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>
Ответ 3
RichTextBox.AppendText("String")
RichTextBox.ScrollToCaret()
Когда я добавлял RichTextBox.text, ScrollToCaret() не работает.
RichTextBox.text = RichTextBox.text + "String"
RichTextBox.ScrollToCaret()