当TextBox处于非活动选项卡时,TextBox.ScrollToEnd不起作用

spl*_*tor 4 wpf scroll textbox

我们的应用程序启动了几个后台进程,并将它们的输出放入TextBoxes - 每个都在TabControl中的一个单独的TabItem中.我希望TextBoxes自动滚动以显示最后一个输出行,因此在将输出/错误行添加到文本框的数据处理函数中,我也调用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();
                }
            }));
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于活动选项卡中的TextBox非常有用,但是当我切换到另一个选项卡时,我发现它没有滚动到最后.

这是一个已知的问题吗?有办法解决吗?

小智 11

设置CaretIndex:

   if (tb != null) 
   { 
       tb.AppendText(e.Data + Environment.NewLine); 
       tb.CaretIndex = tb.Text.Length;
       tb.ScrollToEnd(); 
   } 
Run Code Online (Sandbox Code Playgroud)

  • 除非TextBox具有焦点,否则此解决方案对我不起作用:tb.Focus(). (3认同)