是否有像Visual Studio调试输出一样的WPF输出监视器控件

Blu*_*uuu 5 c# wpf wpf-controls visual-studio

我正在尝试将输出监视器添加到我的WPF应用程序中.一个只读监视器,类似于visual studio中的调试输出.

是否有WPF控件已经提供了我需要的功能?或者有没有办法重用Visual Studio中的控件?

目前我正在使用由StringBuilder支持的标准TextBox.更新进入StringBuilder,而TextBox每200ms获取最新的字符串.

我的问题是,随着输出字符串变长,这变得非常慢.

Aks*_*elK 3

我将使用 RichTextBox 控件来输出数据。

在此示例中,我完全没有遇到性能问题。

public partial class MainWindow : Window
{
    private int counter = 0;
    public MainWindow()
    {
        InitializeComponent();
        Loaded+=OnLoaded;
    }

    private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
    {

        for (int i = 0; i < 200; i++)
        {
            AddLine(counter++ + ": Initial data");
        }

        var timer = new DispatcherTimer();
        timer.Interval = new TimeSpan(0, 0, 0, 0, 200);
        timer.Tick += TimerOnTick;
        timer.IsEnabled = true;
    }

    private void TimerOnTick(object sender, EventArgs eventArgs)
    {
        AddLine(counter++ + ": Random text");
    }

    public void AddLine(string text)
    {
        outputBox.AppendText(text);
        outputBox.AppendText("\u2028"); // Linebreak, not paragraph break
        outputBox.ScrollToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

和 XAML

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <RichTextBox x:Name="outputBox"
                     VerticalScrollBarVisibility="Visible" 
                     HorizontalScrollBarVisibility="Visible" 
                     IsReadOnly="True">
            <FlowDocument/>
        </RichTextBox>

    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

而且扩展它可能很容易。例如,如果滚动位置不在末尾,则不要滚动到末尾,这样您就可以在文本框仍在更新的同时查看旧数据。