Our application starts several background processes and put their output into TextBoxes - each in a separate TabItem in a TabControl. I want the TextBoxes to automatically scroll to show the last output line, so in the data handling function that adds the output/error line to the text box, I also call TextBox.ScrollToEnd():
void OnServerProcessOutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null)
{
Dispatcher.Invoke(new Action(() =>
{
TextBox tb = getServerProcessOutputTextBox(sender);
if (tb != null)
{
tb.AppendText(e.Data + Environment.NewLine);
tb.ScrollToEnd();
}
}));
}
}
This works great for the TextBox in the active tab, but when I switch to another tab, I see that it wasn't scrolled down to the end.
Is this a known problem? Is there a way to fix it?
Set the CaretIndex:
if (tb != null)
{
tb.AppendText(e.Data + Environment.NewLine);
tb.CaretIndex = tb.Text.Length;
tb.ScrollToEnd();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With