小工具知识网

当前位置: 首页 > 行业知识 > WPF 自定义彩色控制台功能

行业知识

WPF 自定义彩色控制台功能

2026-11-08 20:55:52 来源:互联网转载

文章目录

  • 前言
  • 环境
  • 流内容
    • 一个简单的控制台
    • 自动添加数据
      • 无法添加数据模板
      • 代码添加参数
        • 简单的案例
        • 添加和清空功能
        • 完善代码
        • 额外功能添加
          • 移动到底部
          • 添加样式
          • ���结

            前言

            在WPF中添加模拟控制台,可以试试的看到最新的日志信息。但是普通的TextBlock只是纯粹的黑色,这次试试模拟彩色的控制台界面

            环境

            • .net core 8.0
            • win10
            • visual studio 2022
            • Nuget
              • CommunityToolkit.Mvvm
              • HandyControl
              • Microsoft.Extensions.DependencyInjectio

                流内容

                流内容 官方文档

                什么是流内容?简单来说就是好看的报纸。我们这里以HandyControl的实例为例

                一个简单的控制台

                                                                                                                                        

                自动添加数据

                无法添加数据模板

                【流内容】这个是一个特殊的集合,是无法添加控件模板的

                代码添加参数

                在微软的官网文档中,有相对应的文档

                如何:通过 Blocks 属性操作流内容元素

                简单的案例

                我们先搭建一个简单的案例

                                                                                                                                                                                                                                                                                                                                                                            
                namespace WpfApp.Views{    ///     /// ConsoleView.xaml 的交互逻辑    ///     public partial class ConsoleView : UserControl    {        public ConsoleView()        {            InitializeComponent();            ViewModel.ConsoleView = this;        }    }}
                namespace WpfApp.ViewModels{    public partial class ConsoleViewModel : ObservableObject    {        public enum TextType { debug, info, warning, error }        public ConsoleView ConsoleView { get; set; }        public ConsoleViewModel()        {        }        [RelayCommand]        public void Clean()        {        }        [RelayCommand]        public void Debug()        {        }        [RelayCommand]        public void Info()        {        }        [RelayCommand]        public void Warning()        {        }        [RelayCommand]        public void Error()        {        }    }}

                效果

                添加和清空功能

                参考这个代码,但是我们需要修改一下对应的【Run】的颜色

                        ///         /// 插入文本信息        ///         ///         ///         private void InsertMsg(string msg, SolidColorBrush color)        {            var text = new Run(msg);            text.Foreground = color;            var insert = new Paragraph(text);            ConsoleView.FlowDocument.Blocks.Add(insert);        }        [RelayCommand]        public void Debug()        {        //这里只是为了更好的区分,显示我们修改了颜色颜色            InsertMsg("Debug",new SolidColorBrush(Colors.Red));        }

                清空直接用官方文档的方法就可以了

                        [RelayCommand]        public void Clean()        {            ConsoleView.FlowDocument.Blocks.Clear();        }

                完善代码

                namespace WpfApp.ViewModels{    public partial class ConsoleViewModel : ObservableObject    {        public enum TextType { debug, info, warning, error }        public ConsoleView ConsoleView { get; set; }        public ConsoleViewModel()        {        }        [RelayCommand]        public void Clean()        {            ConsoleView.FlowDocument.Blocks.Clear();        }        [RelayCommand]        public void Debug()        {            InsertMsg("Debug", new SolidColorBrush(Colors.Black));        }        [RelayCommand]        public void Info()        {            InsertMsg("Info", new SolidColorBrush(Colors.Green));        }        [RelayCommand]        public void Warning()        {            InsertMsg("Warning", new SolidColorBrush(Colors.YellowGreen));        }        [RelayCommand]        public void Error()        {            InsertMsg("Error", new SolidColorBrush(Colors.Red));        }        ///         /// 插入文本信息        ///         ///         ///         private void InsertMsg(string msg, SolidColorBrush color)        {            var text = new Run(msg);            text.Foreground = color;            var insert = new Paragraph(text);            ConsoleView.FlowDocument.Blocks.Add(insert);        }    }}

                额外功能添加

                移动到底部

                /// /// 插入文本信息/// /// /// private void InsertMsg(string msg, SolidColorBrush color){    var text = new Run(msg);    text.Foreground = color;    var insert = new Paragraph(text);    ConsoleView.FlowDocument.Blocks.Add(insert);    //滚动到文档底部    ConsoleView.RichTextBox.ScrollToEnd();}

                添加样式

                /// /// 插入文本信息/// /// /// private void InsertMsg(string msg, SolidColorBrush color){    var text = new Run(msg);    //添加样式    text.FontWeight = FontWeights.Bold;    text.Foreground = color;    var insert = new Paragraph(text);    //添加样式    insert.Margin = new Thickness(0, 5, 0, 0);    ConsoleView.FlowDocument.Blocks.Add(insert);    ConsoleView.RichTextBox.ScrollToEnd();}

                总结

                这里我可以设置到Ioc容器里面,但是这样会导致博客太过于复杂,这里我就不展开说明了。

上一篇:宝塔面板怎么登录网址?

下一篇:轻松下载表格到桌面,实用方法大揭秘!