LogInfo.xaml.cs
3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using HHECS.Infrastructure.Enums;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace HHECS.WinCommon.Controls
{
/// <summary>
/// LogInfo.xaml 的交互逻辑
/// </summary>
public partial class LogInfo : UserControl
{
public ObservableCollection<LogCon> LogCons
{
get { return (ObservableCollection<LogCon>)GetValue(LogConsProperty); }
set { SetValue(LogConsProperty, value); }
}
// Using a DependencyProperty as the backing store for LogCons. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LogConsProperty =
DependencyProperty.Register("LogCons", typeof(ObservableCollection<LogCon>), typeof(LogInfo), new PropertyMetadata(new ObservableCollection<LogCon>()));
TimeSpan interval = new TimeSpan(0, 0, 5);
public static readonly object LockObject = new object();
public LogInfo()
{
InitializeComponent();
Binding binding = new Binding("LogCons") { Source = this };
list_Log.SetBinding(ListBox.ItemsSourceProperty, binding);
}
/// <summary>
/// 添加日志
/// </summary>
/// <param name="log"></param>
/// <param name="level">1显示绿色,2显示红色,3黄色</param>
public void AddLogs(string log, Level level)
{
lock (LockObject)
{
//List<LogCon> list = LogCons.ToList();
if (LogCons.Any(t => t.Content == log))
{
LogCons.FirstOrDefault(t => t.Content == log).Dt = DateTime.Now;
}
else
{
LogCons.Add(new LogCon()
{
Dt = DateTime.Now,
Content = log,
Level = level switch
{
Level.Info => new SolidColorBrush(Colors.Transparent),
Level.Exception or Level.Error or Level.Failure => new SolidColorBrush(Colors.Red),
Level.Success => new SolidColorBrush(Colors.Green),
Level.Warning => new SolidColorBrush(Colors.Yellow),
_ => new SolidColorBrush(Colors.Transparent),
}
});
}
//按5一组秒内排序
LogCons = new ObservableCollection<LogCon>(LogCons.OrderByDescending(t => t.Dt.Ticks / interval.Ticks).ThenByDescending(t => t.Content));
if (LogCons.Count > 100)
{
LogCons.Remove(LogCons.Last());
}
}
}
}
public class LogCon : ViewBase
{
public DateTime Dt { get; set; }
public string Content { get; set; }
public SolidColorBrush Level { get; set; }
}
}