【问题标题】:TextBox.ScrollToEnd doesn't work when the TextBox is in a non-active tab当 TextBox 处于非活动选项卡中时,TextBox.ScrollToEnd 不起作用
【发布时间】:2009-12-13 00:41:58
【问题描述】:

我们的应用程序启动了几个后台进程并将它们的输出放入 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();
                }
            }));
    }
}

这对活动选项卡中的文本框非常有用,但是当我切换到另一个选项卡时,我发现它没有向下滚动到最后。

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

【问题讨论】:

标签: wpf textbox scroll


【解决方案1】:

设置 CaretIndex:

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

【讨论】:

  • 除非文本框有焦点,否则此解决方案对我不起作用:tb.Focus()。
  • 这个 10 年前的错误仍然存​​在。如果您在此之后以编程方式将焦点移开,那么它仍然不会这样做。
【解决方案2】:

看起来像一个错误...您应该在 Microsoft Connect 上报告它

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2015-01-16
    • 1970-01-01
    • 2020-04-24
    • 2019-08-19
    相关资源
    最近更新 更多