18

ログ出力に使用される読み取り専用の RichTextBox がいくつかあります。それらは読み取り専用であるため、テキストが更新されたときに自動的にスクロールするようには見えません。TextChanged イベントを使用してスクロールを強制的に終了させることはできますが、XAML でプロパティまたは何かを設定して、スクロールが通常どおりに行われるようにする方法はありませんか?

4

4 に答える 4

21

私はあなたの問題をグーグルで検索し、この投稿を見つけました。「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();
        }
    }
}

これにより、自動スクロールの問題が解決されます。確認して、役立つかどうかをお知らせください。

于 2012-04-25T04:57:31.923 に答える
17

この問題は、インタラクティブトリガーと非常に単純なアクションを使用して解決しました。

アクションは次のようになります。

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>
于 2014-01-20T16:11:23.107 に答える
-1
RichTextBox.AppendText("String")
RichTextBox.ScrollToCaret()

RichTextBox.text に追加すると、ScrollToCaret() が機能しません。

RichTextBox.text = RichTextBox.text + "String"
RichTextBox.ScrollToCaret()
于 2015-05-03T23:23:44.207 に答える