c# – 如何为WPF制作简单的只读输出日志控制台?

我有一个
WPF应用程序,我想添加一个按钮,打开一个控制台窗口并显示Console.WriteLine消息.它不一定是CMD控制台,只是一个像模拟的显示框.

我的想法是使用ScrollViewer / TextBox创建一个Window,Console.xaml,并使用类似的东西重定向WriteLine,但我无法让它工作:

XAML

<ScrollViewer Name="Scroller" Margin="0" Background="#FF000128">
    <TextBlock Name="OutputBlock" Foreground="White" FontFamily="Consolas"/>
</ScrollViewer>

C#

System.Diagnostics.Debug.WriteLine("hello", console.OutputBlock.Text);

构造函数

public Console(MainWindow mainwindow)
{
    InitializeComponent();
    this.mainwindow = mainwindow;
}

我在Photoshop中制作的一个示例,包含日志文本

《c# – 如何为WPF制作简单的只读输出日志控制台?》

我试过这个解决方案,但我不确定如何使用它.我得到一个OnStartup“找不到合适的方法来覆盖”错误:

https://stackoverflow.com/a/10416069/6806643

我也试过这个解决方案.我复制确切,但它充满了错误:

https://stackoverflow.com/a/14957478/6806643

这段代码没有错误,但我不知道它应该如何使用:

https://stackoverflow.com/a/3058921/6806643

最佳答案 我使用ScrollView TextBlock和Inlines.Add()代替Console.WriteLine()这是一种非常粗暴的方式,但它正在做我需要的事情.

创建窗口 – LogConsole

XAML

<Grid>
    <ScrollViewer Name="Scroller" Margin="0" Background="#FF000128">
        <TextBlock Name="OutputBlock"  Foreground="White" FontFamily="Consolas" Padding="10"/>
    </ScrollViewer>
</Grid>

启用将数据传递给LogConsole

private MainWindow mainwindow;

public LogConsole() {}

public LogConsole(MainWindow mainwindow)
{
    InitializeComponent();

    this.mainwindow = mainwindow;
}

// Hide Window instead of Exiting
protected override void OnClosing(CancelEventArgs e)
{
    this.Hide();
    e.Cancel = true;
    base.OnClosing(e);
}

主窗口

方法 – 启动日志控制台隐藏

public MainWindow()
{
    InitializeComponent();

    // Start the Log Console
    StartLogConsole();
}

// Method
public void StartLogConsole()
{
    MainWindow mainwindow = this;
    console = new LogConsole(mainwindow);
    // window position
    console.Left = this.Left + 0;
    console.Top = this.Top + 0;
    console.Hide();
}

LogConsole console = new LogConsole();

打开日志控制台按钮

private void buttonLogConsole_Click(object sender, RoutedEventArgs e)
{
    // window position
    console.Left = this.Left + 0;
    console.Top = this.Top + 0;
    console.Show();
}

将日志消息写入ScrollView TextBlock

// Log Console Message
console.OutputBlock.Inlines.Add("Starting Application...\n");

它在后台运行时始终记录并打开/关闭而不会丢失文本.

《c# – 如何为WPF制作简单的只读输出日志控制台?》

点赞