【问题标题】:How to make Simple Read-Only Output Log Console for WPF?如何为 WPF 制作简单的只读输出日志控制台?
【发布时间】:2016-12-22 06:58:46
【问题描述】:

我有一个 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 中使用虚构的日志文本制作的示例

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

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

我也试过这个解决方案。我准确地复制了但它充满了错误:

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

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

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

【问题讨论】:

  • 错误,你说?描述性如何。
  • 对于您提供的第一个链接,当您将函数放在错误的位置时,可能会出现“找不到合适的方法覆盖”的错误。你把它放在“public partial class App : Application”的括号里了吗?
  • @t.m.我现在在应用程序中的正确位置:应用程序。当我第一次运行程序时,控制台会弹出几秒钟然后消失。如何用按钮调用它?关闭时是否还会包含所有 WriteLines?
  • @MattMcManis 不调用 ConsoleHelper.FreeConsole();直到你完成控制台。
  • @t.m.这解决了它关闭。我将 ConsoleHelper 放在 MainWindow 和 ConsoleHelper.AllocConsole();和按钮中的 WriteLine。当我单击按钮时,它现在会打开控制台。但它不像示例中那样 WriteLine "Start"。

标签: c# wpf visual-studio


【解决方案1】:

我使用 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");

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2018-04-21
    • 1970-01-01
    • 2019-10-06
    • 2017-11-22
    • 1970-01-01
    相关资源
    最近更新 更多