这款设备监控软件之前已经写过两篇文章讲解过:
但是感觉还是有些不人性化的地方,今天在原有功能上再次进行优化升级了一下。.
01—新增功能
① 设备报警消除时弹窗输入用户信息;
② 设备报警未清除的话,如果被缩小隐藏到托盘,十秒后又会自动弹出;
③ 单台设备大小调整;
④ 界面底端增加报警信息和消除报警的日志记录;
02—功能演示

03—代码讲解
信息确认窗口:

前台xaml:
<Window x:Class="EquipmentMonitor.ConfirmView"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:EquipmentMonitor"xmlns:cal="http://www.caliburnproject.org"mc:Ignorable="d"d:DesignHeight="450" d:DesignWidth="800" Height="150" Width="250" WindowStyle="None" WindowStartupLocation="CenterScreen"><Window.Resources><Style TargetType="Label"><Setter Property="HorizontalAlignment" Value ="Center"/><Setter Property="VerticalAlignment" Value ="Center"/><Setter Property="FontSize" Value ="14"/><Setter Property="FontWeight" Value ="Black"/></Style><Style TargetType="Button"><Setter Property="HorizontalAlignment" Value ="Center"/><Setter Property="VerticalAlignment" Value ="Center"/><Setter Property="FontSize" Value ="14"/><Setter Property="FontWeight" Value ="Black"/></Style></Window.Resources><Grid><Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="*"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="2*"/></Grid.ColumnDefinitions><Label Content="用户:" Grid.Row="0" Grid.Column="0"/><TextBox Text="{Binding UserInformation.UserName}" Grid.Row="0" Grid.Column="1" Height="25" Margin="5"/><Label Content="信息:" Grid.Row="1" Grid.Column="0"/><TextBox Text="{Binding UserInformation.Information}" Grid.Row="1" Grid.Column="1" Height="25" Margin="2"/><StackPanel Orientation="Horizontal" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Center"><Button Height="25" MinWidth="100" Margin="5" Content="取消" cal:Message.Attach="[Event Click]=[CancleClick($source,$eventArgs)]"/><Button Height="25" MinWidth="100" Margin="5" Content="确认" cal:Message.Attach="[Event Click]=[ConfirmClick($source,$eventArgs)]"/></StackPanel></Grid></Window>
后台代码:
using Caliburn.Micro;using EquipmentMonitor.Model;using PropertyChanged;using System;using System.Text;using System.Windows;namespace EquipmentMonitor{[AddINotifyPropertyChangedInterface]public class ConfirmViewModel:Screen,IViewModel{public UserInformation UserInformation { get; set; } = new UserInformation();public void ConfirmClick(object sender, EventArgs e){var str = ValidateLoginData();if (!string.IsNullOrEmpty(str)){MessageBox.Show(str);}else{this.TryCloseAsync(true);}}public void CancleClick(object sender, EventArgs e){this.TryCloseAsync(false);}public string ValidateLoginData(){StringBuilder sb = new StringBuilder();if ( string.IsNullOrEmpty(UserInformation.Information)){sb.AppendLine("确认信息不能为空,请检查!");}if (string.IsNullOrEmpty(UserInformation.UserName)){sb.AppendLine("用户名不能为空,请检查!");}return sb.ToString();}}}
后台主要是提供了模型数据和信息验证的功能.如果用户名称和备注信息没填写,则提示用户重新填写,点击了Cancle的话,则什么也不做,报警未消除,信息正确填写后,报警被消除。
然后在EquipmentViewModel.cs中调用这个窗口:这里通过IWindowManager 获取这个子窗口,如果信息正确,则记录日志信息
ConfirmViewModel confirmViewModel = new ConfirmViewModel();IWindowManager windowManager = IoC.Get<IWindowManager>();var dialogResult = windowManager.ShowDialogAsync(confirmViewModel);if(dialogResult.Result != null){bool result = Convert.ToBoolean(dialogResult.Result);if(result){LogHelper.logWrite($"The {fileDTO.Title} Equipment Alarm is clear by {confirmViewModel.UserInformation.UserName}," +$"Remarks:{confirmViewModel.UserInformation.Information}", LogLevel.Warning);AlarmInfo += $"{ DateTime.Now.ToLocalTime()}: The {fileDTO.Title} Equipment Alarm is clear by {confirmViewModel.UserInformation.UserName}," +$"Remarks:{confirmViewModel.UserInformation.Information} \n";}else{return;}}}
底端日志信息较多,需要增加滚动条:TextBlock 用ScrollViewer 包起来,并设置VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"就可以。
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"><TextBlock Text="{Binding AlarmInfo}" TextWrapping="Wrap" ScrollViewer.VerticalScrollBarVisibility="Visible" /></ScrollViewer>
此外:窗体启动后让显示在屏幕中央:
WindowStartupLocation="CenterScreen"窗体无边框:
WindowStyle="None"其它部分代码在上节已经有展示讲解,本节不再详说。
04—源码下载
百度网盘链接:https://pan.baidu.com/s/1JTHtx3bfg8mMBVCKHRnSiw
提取码:6666
小编微信:mm1552923