WPF实现一个错误信息栏

news/2024/11/15 4:41:32/文章来源:https://www.cnblogs.com/talon001/p/18330837

实现结果

一,首先建立一个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}");}}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773755.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言中数据的格式化输出

001、输出整型数据,直接输出[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c #include <stdio.h>int main(void) {printf("[%d]\n", 123);return 0; } [root@PC1 test]# gcc test.c -o kkk [root@PC1 test]# ls kkk test.c [root@PC1 test]# ./kkk …

电脑技巧 | 你想拥有这样的自定义工具栏命令按钮吗?QTTabBar帮助你实现!

【电脑技巧】第90期:你想拥有这样的自定义工具栏命令按钮吗?QTTabBar帮助你实现!

window系统使用Tomcat部署若依微服务

安装JAVA 下检查是否安装了JAVAjava -version提示"java: command not found"则表示没有安装,如果安装了会显示JAVA版本信息 CentOS安装JAVAsudo yum install java-11-openjdk-devel 安装完成再执行一下:java -version 说明安装成功,没问题 设置环境变量 设置JAVA_H…

暑假集训CSP提高模拟11

暑假集训CSP提高模拟11 组题人: @KafuuChinocpp\(T1\) P152. Fate \(24pts\)强化版: HDU1688 Sightseeing设 \(dis_{i,0/1}\) 表示从 \(s\) 到 \(i\) 的最短路/次短路长度, \(f_{i,0/1}\) 表示从 \(s\) 到 \(i\) 的最短路/次短路条数。\(dijkstra\) 过程中按照路径长度与最短…

7.29 调试及admin

为什么服务不能启动 go 模块支持 go程序启动过程编译完成之后会在制定目录底下生成一个同名文件, 而不是意向中的service文件 没有搞清楚run是什么的,可以直接运行的 go启动和退出 接口是底层的数据结构 接口的构造过程 反射类型 …

.NET 窗口/屏幕截图

图像采集源除了显示控件(上一篇《.NET 控件转图片》有介绍从界面控件转图片),更多的是窗口以及屏幕。 窗口截图最常用的方法是GDI,直接上Demo吧:1 private void GdiCaptureButton_OnClick(object sender, RoutedEventArgs e)2 {3 var bitmap …

400 Bad Request(错误请求)

400 Bad Request(错误请求):请求无效,服务器无法理解或处理请求。可能的原因包括参数错误、格式错误、缺少必需的字段或数据错误。问题不常见,大多服务器原因,虚拟主机用户联系空间商。 自己购买的服务器,需要寻求三方技术支持排查问题。扫码添加技术【解决问题】专注中…

单细胞转录组上游fasta文件处理

单细胞分析上游fasta文件处理 ——基于cellranger与dropseqRunner###如果测序文件由10X genomics平台产生,则采用cellranger count的基本流程进行fasta文件的上游处理;如果测序文件由dropseq平台产生,则采用dropseqRunner软件进行处理 一、cellranger配置 1、软件安装并查看…

帝国CMS网站忘记后台管理员帐号怎么办?

忘记后台管理员帐号怎么办?使用MySQL数据库管理软件phpmyadmin,查看phome_enewsuser表里的记录:查看username字段的内容。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、…

易优cms空间安装易优,如何去除URL中的index.php

普遍适用于百度云虚拟主机百度云bch云主机支持nginx原生态伪静态规则写法,请将规则写到/webroot/目录下的bcloud_nginx_user.conf文件中(没有则创建),重载站点生效。首先我们写一个bcloud_nginx_user.conf 文件,写入一下代码:location / { if (!-e $request_filename)…

帝国CMS备份数据压缩存放目录

问:帝国CMS备份数据压缩存放目录 答:备份数据压缩存放目录/e/class/config.php扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、P…

访问PHP网站为空白页面怎么办?

错误记录: 访问PHP网站为空白页面错误原因: 部分程序在缓存文件过大时会导致网站空白,出现这种问题时,一般网站后台还是可以访问,登录后台清空程序缓存即可。部分网站程序会生成一个静态页面,而生成的时候因为种种原因,生成的首页文件index.html大小是0KB,没有内容,造…