首页 > 其他分享 >WPF实现一个错误信息栏

WPF实现一个错误信息栏

时间:2024-07-29 19:20:39浏览次数:9  
标签:Instance 实现 代码 错误信息 LogStr WPF public ErrorLogViewModel

实现结果

一,首先建立一个UserControl

前台代码如下:

点击查看代码
<UserControl x:Class="实现一个错误信息栏.ErrorLog"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:实现一个错误信息栏"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
        <TextBox x:Name="ErrorTextBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding LogStr}"  Foreground="Red" Margin="0" Padding="0" IsReadOnly="True" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible"  FontSize="14" FontWeight="DemiBold" TextChanged="ErrorTextBox_TextChanged" ></TextBox>
    </Grid>
</UserControl>

后台代码如下:

点击查看代码
/// <summary>
/// ErrorLog.xaml 的交互逻辑
/// </summary>
public partial class ErrorLog : UserControl
{
    public ErrorLog()
    {
        InitializeComponent();
        this.DataContext= ErrorLogViewModel.Instance;
    }

    private void ErrorTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        var textBox = sender as TextBox;
        if (textBox != null)
        {
            // 滚动到 TextBox 的最下方
            textBox.ScrollToEnd();
        }
    }
}

二,然后建立一个类,用来作以上控件的上下文

完整代码如下:

点击查看代码
public class ErrorLogViewModel : INotifyPropertyChanged
{
    #region 做成单例模式
    public static ErrorLogViewModel _Instance;

    public static ErrorLogViewModel Instance
    {
        get
        {
            if (_Instance == null)
                _Instance = new ErrorLogViewModel();
            return _Instance;
        }
    }

    private ErrorLogViewModel() { }
    #endregion

    //最大字符长度
    int maxMsgLength = 5000;

    public void AddLogStr(string str)
    {
        var msg = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss:fff}] {str}\r\n";
        LogStr += msg;
        if(LogStr.Length > maxMsgLength)
        {
            LogStr = LogStr.Substring(LogStr.Length - maxMsgLength);
        }
    }


    private string _LogStr;

    public string LogStr
    {
        get { return _LogStr; }
        set { _LogStr = value; OnPropertyChange("LogStr"); }
    }


    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChange(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

这里主要继承了一个接口INotifyPropertyChanged,用来通知前台数据已改变。然后做成单例模式是为了确保只有一个实例,该实例就是绑定到UserControl并且充当其上下文的实例,这样在其他地方产生的错误信息才能展示在UserControl前台。然后提供了一个AddLogStr方法,供其他地方调用来输入错误信息。

三,建一个页面测试该控件

前台代码:

点击查看代码
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="7*"/>
        <RowDefinition Height="3*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="8*"/>
    </Grid.ColumnDefinitions>
    <!--建一个按钮来生成错误信息-->
    <Button Grid.Column="0" Grid.Row="1" Click="Button_Click" Content="生成错误信息"/>

    <local:ErrorLog Grid.Column="1" Grid.Row="1"/>

</Grid>

后台代码:

点击查看代码
 public partial class MainWindow : Window
 {
     public MainWindow()
     {
         InitializeComponent();
     }

     private void Button_Click(object sender, RoutedEventArgs e)
     {
         ErrorLogViewModel.Instance.AddLogStr($"新的错误信息+{DateTime.Now}");
     }
 }

我这里通过按钮来生成错误信息,只是举一个例子,错误信息可能在程序运行的任一模块产生,然后在相应的地方调用生成错误的方法就可以展示在界面了。

标签:Instance,实现,代码,错误信息,LogStr,WPF,public,ErrorLogViewModel
From: https://www.cnblogs.com/talon001/p/18330837

相关文章

  • 电脑技巧 | 你想拥有这样的自定义工具栏命令按钮吗?QTTabBar帮助你实现!
      【电脑技巧】第90期:你想拥有这样的自定义工具栏命令按钮吗?QTTabBar帮助你实现!    ......
  • 支付宝退款和结果查询接口简单实现(.Net 7.0)
    〇、前言支付宝对.Net的支持还是比较充分的,在每个接口文档中都有关于C#语言的示例,这样就大大降低了对接的难度,很容易上手。官方接口文档地址:退款-alipay.trade.refund 退款状态查询-alipay.trade.fastpay.refund.query 本文就简单实现下这两个接口,并顺便记录特别注意的......
  • 易优CMS模板标签uibackground背景图片在模板文件index.htm中调用uibackground标签,实现
    【基础用法】标签:uibackground描述:背景图片上传标签,使用时结合html一起才能完成可视化布局,只针对具有可视化功能的模板。用法:<divclass="eyou-edit"e-id="文件模板里唯一的数字ID"e-page='文件模板名'e-type="background"style="background-image:url({eyou:uibackgrounde......
  • PHP获取MySQL错误信息的方法是什么
    在PHP中,当你使用MySQLi或PDO扩展与MySQL数据库进行交互时,你可能会遇到错误或异常。以下是如何从MySQLi和PDO获取错误信息的方法:使用MySQLi获取错误信息:如果你使用的是MySQLi扩展,你可以通过mysqli_error()函数或mysqli对象的error属性来获取最近调用的错误描述。使用mysqli_erro......
  • 验证码原理与Django实现--简单图片验证码
    前言在网页中常见图片中包含数字字母的验证码如下如果将其简化,那么我们可以认为验证码是由数字字母加上遮挡的线段所构成。本文,我们不妨先解决其中数字与字母的简单生成数字字母的生成原理与代码实现 首先,可以使用PIL库中的类Image和ImageDraw,用于生成图片和调用画笔对生......
  • css实现三角形的几种方式
    1.使用边框绘制三角形通过设置一个元素的宽度和高度为0,然后设置不同边框的颜色和宽度来实现。<divclass="triangle"></div>.triangle{width:0;height:0;border-left:50pxsolidtransparent;border-right:50pxsolidtransparent;border-botto......
  • 实现基于Spring Security的权限控制在淘客返利系统中的应用
    实现基于SpringSecurity的权限控制在淘客返利系统中的应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在构建淘客返利系统时,确保系统的安全性和权限控制是至关重要的。SpringSecurity是一个功能强大的框架,用于提供综合的身份验证和授权服务。......
  • 基于javaweb的家乡旅游网站的设计与实现
    摘 要随着社会经济的持续发展和人民生活水平的提高,旅游已经成为人们生活中不可或缺的重要组成部分。同时,互联网的普及,让人们对于旅游信息的获取逐渐转移到线上平台。基于javaweb的家乡旅游网站作为一个便捷的家乡旅游资讯信息的平台,为用户提供了实时且全面的家乡旅游信息,包......
  • 基于python语言的新闻推荐系统的设计与实现
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5修改信息流程2.2.6删除信息流程2.3 系统......
  • Python装饰器实现Hook类
    背景最近有个新的需求是使用Redmine进行一些提交前后的处理,备忘下一些思路实现思路为了统一代码的路径以及调用方式,封装了一个Hook类,按理来说是可以对所有类似的代码使用的,这里使用了Python装饰器,统一对同一个命名类的进行处理,相当于定义了函数的路由核心代码见下:Hook.pyfro......