在 C# 应用程序中,如何创建自动滚动到最新条目的文本框

问题描述 投票:0回答:1

我一直在尝试修改一个具有日志记录窗口的应用程序,该窗口当前仅在用户使用鼠标滚轮手动滚动时才会滚动。我希望窗口在更新时向下滚动。我进行了广泛的搜索并找到了很多答案,但似乎没有一个有效。

对于 C# 和 .NET 等,我是一个新手。这是我目前拥有的:

XAML:

<ScrollViewer x:Name="scrollViewer" HorizontalAlignment="Left" Height="Auto" Margin="10,430,0,0" VerticalAlignment="Top" Width="Auto" VerticalScrollMode="Enabled" VerticalScrollBarVisibility="Auto">
            <TextBox x:Name="txtbxCommLog" Height="500" Text="" TextWrapping="Wrap" Width="1060"/></ScrollViewer>

C#

public async Task AddtoLogWindow(string text)
    {
        await _dispatcherQueue.EnqueueAsync(() =>
        {
            if (logText.Length > 10000)
            {
                logText = "";
            }
            logText += text;
            txtbxCommLog.Text = logText;
            scrollViewer.ScrollToVerticalOffset(scrollViewer.ActualHeight);
        });
    }

但是这种方法不会改变文本框的内容,它始终位于顶部。

c# wpf xaml
1个回答
0
投票

我认为你只需要

scrollViewer.ScrollToEnd();
而不是
ScrollToVerticalOffset

这对我有用:

        private Timer _timer;

        public ScrollingTextBox()
        {
            InitializeComponent();

            _timer = new Timer(500);
            _timer.Elapsed += (s, e) => AddtoLogWindow($"{ DateTime.Now}\n");
            _timer.Start();
        }

        public async Task AddtoLogWindow(string text)
        {
            await Dispatcher.InvokeAsync(() =>
            {
                //if (logText.Length > 10000)
                //{
                //    logText = "";
                //}
                //logText += text;
                txtbxCommLog.Text += text;
                scrollViewer.ScrollToEnd();
            });
        }
        <ScrollViewer x:Name="scrollViewer"
                      HorizontalAlignment="Left"
                      Height="Auto"
                      VerticalAlignment="Top"
                      Width="Auto"
                      VerticalScrollBarVisibility="Auto">
                      <!--VerticalScrollMode="Enabled"-->
            <TextBox x:Name="txtbxCommLog"
                     Text="Staring text"
                     TextWrapping="Wrap" />
        </ScrollViewer>
© www.soinside.com 2019 - 2024. All rights reserved.