C# の Console.WriteLine をした時に、テキストブロックに出力させる方法です。
手順
TextBlock コントロールを追加
MainWindow.xaml ファイルを開き、Window 要素内に TextBlock コントロールを追加します。
1 2 3 4 5 6 7 8
| <Window x:Class="WpfApp1.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> <TextBlock x:Name="outputTextBlock" /> </Grid> </Window>
|
ControlWriter クラスを作成
ControlWriter クラスは、System.IO.TextWriter クラスを継承し、Write メソッドをオーバーライドして TextBlock コントロールに出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| namespace WpfApp1 { public class ControlWriter : System.IO.TextWriter { private readonly System.Windows.Controls.TextBlock _output;
public ControlWriter(System.Windows.Controls.TextBlock output) { _output = output; }
public override void Write(char value) { _output.Dispatcher.Invoke(() => _output.Text += value); }
public override System.Text.Encoding Encoding => System.Text.Encoding.UTF8; } }
|
TextBlock コントロールを出力先に設定
MainWindow.xaml.cs ファイルを開き、以下のコードを追加して、コンソール出力を TextBlock コントロールに表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| using ConsoleApp1; using System; using System.Windows;
namespace WpfApp1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent();
// コンソール出力を TextBlock に表示する Console.SetOut(new ControlWriter(outputTextBlock)); } } }
|
確認
Console.WriteLine をすると、TextBlock コントロールにログが出力されるようになります。