我一直在尝试修改一个具有日志记录窗口的应用程序,该窗口当前仅在用户使用鼠标滚轮手动滚动时才会滚动。我希望窗口在更新时向下滚动。我进行了广泛的搜索并找到了很多答案,但似乎没有一个有效。
对于 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);
});
}
但是这种方法不会改变文本框的内容,它始终位于顶部。
我认为你只需要
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>