ロギング出力に使用される読み取り専用のRichTextBoxがいくつかあります。読み取り専用であるため、テキストが更新されたときに自動的にスクロールするようには見えません。 I can TextChangedイベントを使用してスクロールを強制的に終了しますが、スクロールが通常のように行われるようにXAMLにプロパティなどを設定する方法はありませんか?
私はあなたの問題をグーグルで検索し、 this postを見つけました。 「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();
}
}
}
これにより、自動スクロールの問題が解決します。確認して、役立つかどうかをお知らせください。
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>