跳到主要内容

github/tai

公开

Tai · Windows 软件与网站使用时长统计。上游 Planshit/Tai 的源码镜像,非灵栈原创;MIT 许可。来源:https://github.com/Planshit/Tai 。本次为手动同步,暂不提供安装包。

提交记录
新增Core/Librarys/Time.cs+92 −0看文件
@@ -0,0 +1,92 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:
7新增:namespace Core.Librarys
8新增:{
9新增: public class Time
10新增: {
11新增: public static string ToString(int seconds)
12新增: {
13新增: if (seconds < 60)
14新增: {
15新增: return seconds + "秒";
16新增: }
17新增: else
18新增: {
19新增: double minutes = seconds / 60;
20新增: if (minutes < 60)
21新增: {
22新增: return minutes + "分钟";
23新增: }
24新增: else
25新增: {
26新增: double hours = (double)minutes / 60;
27新增: if (hours != (int)hours)
28新增: {
29新增: double pointNumber = hours - (int)hours;
30新增: return (int)hours + "小时" + (int)(pointNumber * 60) + "分";
31新增: }
32新增: return hours + "小时";
33新增: }
34新增: }
35新增: }
36新增:
37新增: public static DateTime[] GetThisWeekDate()
38新增: {
39新增: DateTime weekStartDate = DateTime.Now, weekEndDate = DateTime.Now;
40新增: if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
41新增: {
42新增: weekStartDate = DateTime.Now.Date;
43新增: weekEndDate = DateTime.Now.Date.AddDays(6);
44新增: }
45新增: else
46新增: {
47新增: int weekNum = (int)DateTime.Now.DayOfWeek;
48新增: if (weekNum == 0)
49新增: {
50新增: weekNum = 7;
51新增: }
52新增: weekNum -= 1;
53新增: weekStartDate = DateTime.Now.Date.AddDays(-weekNum);
54新增: weekEndDate = weekStartDate.Date.AddDays(6);
55新增: }
56新增: return new[] { weekStartDate, weekEndDate };
57新增: }
58新增:
59新增: public static DateTime[] GetLastWeekDate()
60新增: {
61新增: DateTime weekStartDate = DateTime.Now, weekEndDate = DateTime.Now;
62新增:
63新增: int weekNum = (int)DateTime.Now.DayOfWeek;
64新增: if (weekNum == 0)
65新增: {
66新增: weekNum = 7;
67新增: }
68新增:
69新增:
70新增: weekStartDate = DateTime.Now.Date.AddDays(-6 - weekNum);
71新增: weekEndDate = weekStartDate.AddDays(6);
72新增:
73新增: return new[] { weekStartDate, weekEndDate };
74新增: }
75新增:
76新增: public static DateTime[] GetMonthDate(DateTime date)
77新增: {
78新增: var dateStart = new DateTime(date.Year, date.Month, 1);
79新增: var dateEnd = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));
80新增:
81新增: return new[] { dateStart, dateEnd };
82新增: }
83新增:
84新增: public static DateTime[] GetYearDate(DateTime date)
85新增: {
86新增: var dateStart = new DateTime(date.Year, 1, 1, 0, 0, 0);
87新增: var dateEnd = new DateTime(date.Year, 12, DateTime.DaysInMonth(date.Year, 12), 23, 59, 59);
88新增: return new[] { dateStart, dateEnd };
89新增:
90新增: }
91新增: }
92新增:}
新增Core/Models/Data/HoursDataModel.cs+14 −0看文件
@@ -0,0 +1,14 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:
7新增:namespace Core.Models.Data
8新增:{
9新增: public class CategoryChartDataModel
10新增: {
11新增: public int CategoryID { get; set; }
12新增: public double[] Values { get; set; }
13新增: }
14新增:}
修改Core/Servicers/Instances/Data.cs+160 −26看文件
@@ -7,6 +7,8 @@ using System.Diagnostics;
77using System.Linq;
88using System.Data.Entity;
99using System.Windows.Threading;
10新增:using Core.Models.Data;
11新增:using Core.Librarys;
1012
1113namespace Core.Servicers.Instances
1214{
@@ -98,38 +100,22 @@ namespace Core.Servicers.Instances
98100 }
99101 }
100102
101删除: public IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end)
103新增: public IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end, int take = -1)
102104 {
103105
104106 IEnumerable<AppModel> apps = appData.GetAllApps();
105107
106删除: //using (var db = new StatisticContext())
107删除: //{
108删除:
109删除:
110删除: // //var test = db.DailyLog.Include(m=>m.AppModel).Where(m => m.AppModelID != 0).Take(4).ToList();
111删除: // //var res = db.DailyLog.Include(m => m.AppModel).SqlQuery("Select *,Sum(Time) as Time,DailyLogModels.ID,AppModelID,Date,AppModels.ID,AppModels.Name,AppModels.Description,AppModels.File,AppModels.CategoryID,AppModels.IconFile,AppModels.TotalTime from DailyLogModels LEFT OUTER JOIN AppModels ON AppModels.ID=DailyLogModels.ID WHERE AppModelID<>0 AND Date between '" + start.ToString("yyyy-MM-dd HH:mm:ss") + "' AND '" + end.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModelID ").ToList();
112108 using (var db = new TaiDbContext())
113109 {
114删除: //var res = db.DailyLog
115删除: //.Include(m => m.AppModel)
116删除: //.Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0)
117删除: //.GroupBy(m => m.AppModelID)
118删除: //.Select(m => new
119删除: //{
120删除: // Time = m.Sum(a => a.Time),
121删除: // App = m.FirstOrDefault().AppModel,
122删除: // Date = m.FirstOrDefault().Date,
123删除: //})
124删除: //.ToList()
125删除: //.Select(m => new DailyLogModel
126删除: //{
127删除: // Time = m.Time,
128删除: // AppModel = m.App,
129删除: // Date = m.Date
130删除: //});
131删除:
132删除: var res = db.DailyLog
110新增: var data = take == -1 ? db.DailyLog
111新增: .Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0)
112新增: .GroupBy(m => m.AppModelID)
113新增: .Select(m => new
114新增: {
115新增: Time = m.Sum(a => a.Time),
116新增: Date = m.FirstOrDefault().Date,
117新增: AppID = m.FirstOrDefault().AppModelID
118新增: }) : db.DailyLog
133119 .Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0)
134120 .GroupBy(m => m.AppModelID)
135121 .Select(m => new
@@ -138,6 +124,9 @@ namespace Core.Servicers.Instances
138124 Date = m.FirstOrDefault().Date,
139125 AppID = m.FirstOrDefault().AppModelID
140126 })
127新增: .Take(take);
128新增:
129新增: var res = data
141130 .ToList()
142131 .Select(m => new DailyLogModel
143132 {
@@ -304,6 +293,151 @@ namespace Core.Servicers.Instances
304293 }
305294 }
306295
296新增: public struct CategoryHoursDataModel
297新增: {
298新增: public int Total { get; set; }
299新增: public int CategoryID { get; set; }
300新增: public DateTime Time { get; set; }
301新增:
302新增: }
303新增:
304新增: public List<CategoryChartDataModel> GetCategoryHoursData(DateTime date)
305新增: {
306新增: using (var db = new TaiDbContext())
307新增: {
308新增: // 查出有数据的分类
309新增: //var res = db.Database.SqlQuery<CategoryHoursDataModel>("select AppModels.CategoryID,HoursLogModels.DataTime as Time from HoursLogModels join AppModels on AppModels.ID=HoursLogModels.AppModelID where HoursLogModels.AppModelID<>0 and AppModels.CategoryID<>0 and HoursLogModels.DataTime>='" + start.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and HoursLogModels.DataTime<= '"+ end.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModels.CategoryID").ToArray();
310新增: var categorys = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,HoursLogModels.DataTime as Time from HoursLogModels join AppModels on AppModels.ID=HoursLogModels.AppModelID where AppModels.CategoryID<>0 and HoursLogModels.DataTime>='" + date.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and HoursLogModels.DataTime<= '" + date.Date.ToString("yyyy-MM-dd 23:59:59") + "' GROUP BY AppModels.CategoryID ").ToArray();
311新增:
312新增:
313新增: var data = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,HoursLogModels.DataTime as Time from HoursLogModels join AppModels on AppModels.ID=HoursLogModels.AppModelID where AppModels.CategoryID<>0 and HoursLogModels.DataTime>='" + date.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and HoursLogModels.DataTime<= '" + date.Date.ToString("yyyy-MM-dd 23:59:59") + "' GROUP BY AppModels.CategoryID,HoursLogModels.DataTime ").ToArray();
314新增:
315新增:
316新增: List<CategoryChartDataModel> list = new List<CategoryChartDataModel>();
317新增:
318新增: foreach (var category in categorys)
319新增: {
320新增: list.Add(new CategoryChartDataModel()
321新增: {
322新增: CategoryID = category.CategoryID,
323新增: Values = new double[24]
324新增: });
325新增: }
326新增:
327新增: for (int i = 0; i < 24; i++)
328新增: {
329新增: string hours = i < 10 ? "0" + i : i.ToString();
330新增: var time = date.ToString($"yyyy-MM-dd {hours}:00:00");
331新增: foreach (var category in categorys)
332新增: {
333新增: var log = data.Where(m => m.CategoryID == category.CategoryID && m.Time.ToString("yyyy-MM-dd HH:00:00") == time).FirstOrDefault();
334新增:
335新增: var item = list.Where(m => m.CategoryID == category.CategoryID).FirstOrDefault();
336新增:
337新增: item.Values[i] = log.Total;
338新增: }
339新增: }
340新增: return list;
341新增: }
342新增: }
343新增:
344新增: public List<CategoryChartDataModel> GetCategoryRangeData(DateTime start, DateTime end)
345新增: {
346新增: using (var db = new TaiDbContext())
347新增: {
348新增: // 查出有数据的分类
349新增:
350新增: var categorys = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,DailyLogModels.Date as Time from DailyLogModels join AppModels on AppModels.ID=DailyLogModels.AppModelID where AppModels.CategoryID<>0 and DailyLogModels.Date>='" + start.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and DailyLogModels.Date<= '" + end.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModels.CategoryID").ToArray();
351新增:
352新增:
353新增: var data = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,DailyLogModels.Date as Time from DailyLogModels join AppModels on AppModels.ID=DailyLogModels.AppModelID where AppModels.CategoryID<>0 and DailyLogModels.Date>='" + start.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and DailyLogModels.Date<= '" + end.Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModels.CategoryID,DailyLogModels.Date ").ToArray();
354新增:
355新增:
356新增: var ts = end - start;
357新增: var days = ts.TotalDays + 1;
358新增:
359新增:
360新增: List<CategoryChartDataModel> list = new List<CategoryChartDataModel>();
361新增:
362新增:
363新增: foreach (var category in categorys)
364新增: {
365新增: list.Add(new CategoryChartDataModel()
366新增: {
367新增: CategoryID = category.CategoryID,
368新增: Values = new double[(int)days]
369新增: });
370新增: }
371新增:
372新增:
373新增:
374新增: for (int i = 0; i < days; i++)
375新增: {
376新增: string day = i < 10 ? "0" + i : i.ToString();
377新增: var time = start.AddDays(i).ToString($"yyyy-MM-dd 00:00:00");
378新增: Debug.WriteLine(time);
379新增: foreach (var category in categorys)
380新增: {
381新增: var log = data.Where(m => m.CategoryID == category.CategoryID && m.Time.ToString("yyyy-MM-dd 00:00:00") == time).FirstOrDefault();
382新增:
383新增: var item = list.Where(m => m.CategoryID == category.CategoryID).FirstOrDefault();
384新增:
385新增: item.Values[i] = log.Total;
386新增: }
387新增: }
388新增: return list;
389新增: }
390新增: }
391新增:
392新增: public List<CategoryChartDataModel> GetCategoryYearData(DateTime date)
393新增: {
394新增: using (var db = new TaiDbContext())
395新增: {
396新增: // 查出有数据的分类
397新增:
398新增: var dateArr = Time.GetYearDate(date);
399新增:
400新增: var categorys = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,DailyLogModels.Date as Time from DailyLogModels join AppModels on AppModels.ID=DailyLogModels.AppModelID where AppModels.CategoryID<>0 and DailyLogModels.Date>='" + dateArr[0].Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and DailyLogModels.Date<= '" + dateArr[1].Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModels.CategoryID").ToArray();
307401
402新增:
403新增: var data = db.Database.SqlQuery<CategoryHoursDataModel>("select sum(Time) as Total,AppModels.CategoryID,DailyLogModels.Date as Time from DailyLogModels join AppModels on AppModels.ID=DailyLogModels.AppModelID where AppModels.CategoryID<>0 and DailyLogModels.Date>='" + dateArr[0].Date.ToString("yyyy-MM-dd HH:mm:ss") + "' and DailyLogModels.Date<= '" + dateArr[1].Date.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModels.CategoryID,DailyLogModels.Date ").ToArray();
404新增:
405新增:
406新增: //var ts = end - start;
407新增: //var days = ts.TotalDays + 1;
408新增:
409新增:
410新增: List<CategoryChartDataModel> list = new List<CategoryChartDataModel>();
411新增:
412新增:
413新增: foreach (var category in categorys)
414新增: {
415新增: list.Add(new CategoryChartDataModel()
416新增: {
417新增: CategoryID = category.CategoryID,
418新增: Values = new double[12]
419新增: });
420新增: }
421新增:
422新增:
423新增:
424新增: for (int i = 1; i < 13; i++)
425新增: {
426新增: string month = i < 10 ? "0" + i : i.ToString();
427新增: var dayArr = Time.GetMonthDate(new DateTime(date.Year, i, 1));
428新增:
429新增: Debug.WriteLine(dayArr);
430新增: foreach (var category in categorys)
431新增: {
432新增: var total = data.Where(m => m.CategoryID == category.CategoryID && m.Time >= dayArr[0] && m.Time <= dayArr[1]).Sum(m => m.Total);
433新增:
434新增: var item = list.Where(m => m.CategoryID == category.CategoryID).FirstOrDefault();
435新增:
436新增: item.Values[i - 1] = total;
437新增: }
438新增: }
439新增: return list;
440新增: }
441新增: }
308442 }
309443}
修改Core/Servicers/Interfaces/IData.cs+22 −1看文件
@@ -1,4 +1,5 @@
11using Core.Models;
2新增:using Core.Models.Data;
23using System;
34using System.Collections.Generic;
45using System.Linq;
@@ -30,7 +31,7 @@ namespace Core.Servicers.Interfaces
3031 /// <param name="start"></param>
3132 /// <param name="end"></param>
3233 /// <returns></returns>
33删除: IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end);
34新增: IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end, int take = -1);
3435
3536 /// <summary>
3637 /// 获取本周的数据
@@ -71,5 +72,25 @@ namespace Core.Servicers.Interfaces
7172 /// <param name="day"></param>
7273 /// <returns></returns>
7374 DailyLogModel GetProcess(int appID, DateTime day);
75新增:
76新增: /// <summary>
77新增: /// 获取指定日期所有分类时段统计数据
78新增: /// </summary>
79新增: /// <returns></returns>
80新增: List<CategoryChartDataModel> GetCategoryHoursData(DateTime date);
81新增: /// <summary>
82新增: /// 获取指定日期范围所有分类按天统计数据
83新增: /// </summary>
84新增: /// <param name="start"></param>
85新增: /// <param name="end"></param>
86新增: /// <returns></returns>
87新增: List<CategoryChartDataModel> GetCategoryRangeData(DateTime start, DateTime end);
88新增: /// <summary>
89新增: /// 获取指定年份所有分类按月份统计数据
90新增: /// </summary>
91新增: /// <param name="date"></param>
92新增: /// <returns></returns>
93新增: List<CategoryChartDataModel> GetCategoryYearData(DateTime date);
94新增:
7495 }
7596}
修改UI/App.xaml.cs+18 −0看文件
@@ -51,6 +51,11 @@ namespace UI
5151
5252 DispatcherUnhandledException += App_DispatcherUnhandledException;
5353
54新增:#if DEBUG
55新增: DispatcherUnhandledException -= App_DispatcherUnhandledException;
56新增:
57新增:#endif
58新增:
5459 var serviceCollection = new ServiceCollection();
5560 ConfigureServices(serviceCollection);
5661 serviceProvider = serviceCollection.BuildServiceProvider();
@@ -183,6 +188,7 @@ namespace UI
183188 services.AddSingleton<IAppConfig, AppConfig>();
184189 services.AddSingleton<IDateObserver, DateObserver>();
185190 services.AddSingleton<IAppData, AppData>();
191新增: services.AddSingleton<ICategorys, Categorys>();
186192
187193 // 主窗口
188194 services.AddSingleton<MainViewModel>();
@@ -203,6 +209,18 @@ namespace UI
203209 // 详情页
204210 services.AddTransient<DetailPage>();
205211 services.AddTransient<DetailPageVM>();
212新增:
213新增: // 分类
214新增: services.AddTransient<CategoryPage>();
215新增: services.AddTransient<CategoryPageVM>();
216新增:
217新增: // 分类app
218新增: services.AddTransient<CategoryAppListPage>();
219新增: services.AddTransient<CategoryAppListPageVM>();
220新增:
221新增: // 图表
222新增: services.AddTransient<ChartPage>();
223新增: services.AddTransient<ChartPageVM>();
206224 }
207225
208226 private void OnStartup(object sender, StartupEventArgs e)
修改UI/Base/Color/Colors.cs+2 −0看文件
@@ -35,6 +35,8 @@ namespace UI.Base.Color
3535
3636 };
3737
38新增: public static string[] MainColors = { "#15C38E", "#A761FF", "#C70B80", "#FFE6E6", "#00FFAB", "#B8F1B0", "#DAEAF1", "#1464DF", "#FF5C01", "#9EB23C", "#FF9999", "#998CEB", "#77E4D4", "#FD5E5E", "#B4FF9F", "#07FF01", "#FFE162", "#590696", "#97DBAE" };
39新增:
3840 public static IColor Get(ColorTypes color)
3941 {
4042 return ColorList[color];
新增UI/Controls/Base/View.cs+86 −0看文件
@@ -0,0 +1,86 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:using System.Windows;
7新增:using System.Windows.Controls;
8新增:
9新增:namespace UI.Controls.Base
10新增:{
11新增: public class View : ContentControl
12新增: {
13新增: public string Condition
14新增: {
15新增: get { return (string)GetValue(ConditionProperty); }
16新增: set { SetValue(ConditionProperty, value); }
17新增: }
18新增: public static readonly DependencyProperty ConditionProperty =
19新增: DependencyProperty.Register("Condition",
20新增: typeof(string),
21新增: typeof(View));
22新增: public object Value
23新增: {
24新增: get { return (object)GetValue(ValueProperty); }
25新增: set { SetValue(ValueProperty, value); }
26新增: }
27新增: public static readonly DependencyProperty ValueProperty =
28新增: DependencyProperty.Register("Value",
29新增: typeof(object),
30新增: typeof(View), new PropertyMetadata(new PropertyChangedCallback(OnPropertyChanged)));
31新增:
32新增: private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
33新增: {
34新增: var control = d as View;
35新增: control.Handle();
36新增: }
37新增:
38新增: public View()
39新增: {
40新增: DefaultStyleKey = typeof(View);
41新增: }
42新增:
43新增:
44新增: private void Handle()
45新增: {
46新增: if (string.IsNullOrEmpty(Condition) && Value == null)
47新增: {
48新增: return;
49新增: }
50新增:
51新增: bool isShow = false;
52新增: if (string.IsNullOrEmpty(Condition))
53新增: {
54新增: if ((bool)Value)
55新增: {
56新增: isShow = true;
57新增: }
58新增: }
59新增: else
60新增: {
61新增:
62新增:
63新增: if (Condition.IndexOf("=") != -1)
64新增: {
65新增: string val = Condition.Substring(Condition.IndexOf("=") + 1);
66新增: isShow = val == Value.ToString();
67新增: }
68新增: else
69新增: {
70新增: isShow = Condition == Value.ToString();
71新增: }
72新增: }
73新增:
74新增:
75新增: if (isShow)
76新增: {
77新增: Visibility = Visibility.Visible;
78新增: }
79新增: else
80新增: {
81新增: Visibility = Visibility.Collapsed;
82新增: }
83新增:
84新增: }
85新增: }
86新增:}
修改UI/Controls/Button/IconButton.cs+11 −1看文件
@@ -21,6 +21,16 @@ namespace UI.Controls.Button
2121 DependencyProperty.Register("Command",
2222 typeof(ICommand),
2323 typeof(IconButton));
24新增:
25新增: public object CommandParameter
26新增: {
27新增: get { return (object)GetValue(CommandParameterProperty); }
28新增: set { SetValue(CommandParameterProperty, value); }
29新增: }
30新增: public static readonly DependencyProperty CommandParameterProperty =
31新增: DependencyProperty.Register("CommandParameter",
32新增: typeof(object),
33新增: typeof(IconButton));
2434 public IconTypes Icon
2535 {
2636 get { return (IconTypes)GetValue(IconProperty); }
@@ -39,7 +49,7 @@ namespace UI.Controls.Button
3949 {
4050 base.OnMouseLeftButtonUp(e);
4151
42删除: Command?.Execute(null);
52新增: Command?.Execute(CommandParameter);
4353 }
4454 protected override void OnMouseEnter(MouseEventArgs e)
4555 {
新增UI/Controls/Charts/ChartDataValueType.cs+14 −0看文件
@@ -0,0 +1,14 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:
7新增:namespace UI.Controls.Charts
8新增:{
9新增: public enum ChartDataValueType
10新增: {
11新增: Seconds,
12新增: Number
13新增: }
14新增:}
新增UI/Controls/Charts/ChartItemTypeColumn.cs+148 −0看文件
@@ -0,0 +1,148 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:using System.Windows;
7新增:using System.Windows.Controls;
8新增:using System.Windows.Input;
9新增:using System.Windows.Shapes;
10新增:using UI.Base.Color;
11新增:
12新增:namespace UI.Controls.Charts
13新增:{
14新增: public class ChartItemTypeColumn : Control
15新增: {
16新增: #region MaxValue 最大值
17新增: /// <summary>
18新增: /// 样式类型
19新增: /// </summary>
20新增: public double MaxValue
21新增: {
22新增: get { return (double)GetValue(MaxValueProperty); }
23新增: set { SetValue(MaxValueProperty, value); }
24新增: }
25新增: public static readonly DependencyProperty MaxValueProperty =
26新增: DependencyProperty.Register("MaxValue",
27新增: typeof(double),
28新增: typeof(ChartItemTypeColumn));
29新增:
30新增:
31新增: #endregion
32新增:
33新增: #region 值
34新增: /// <summary>
35新增: /// 样式类型
36新增: /// </summary>
37新增: public double Value
38新增: {
39新增: get { return (double)GetValue(ValueProperty); }
40新增: set { SetValue(ValueProperty, value); }
41新增: }
42新增: public static readonly DependencyProperty ValueProperty =
43新增: DependencyProperty.Register("Value",
44新增: typeof(double),
45新增: typeof(ChartItemTypeColumn));
46新增:
47新增:
48新增: #endregion
49新增: #region 颜色
50新增: /// <summary>
51新增: /// 样式类型
52新增: /// </summary>
53新增: public string Color
54新增: {
55新增: get { return (string)GetValue(ColorProperty); }
56新增: set { SetValue(ColorProperty, value); }
57新增: }
58新增: public static readonly DependencyProperty ColorProperty =
59新增: DependencyProperty.Register("Color",
60新增: typeof(string),
61新增: typeof(ChartItemTypeColumn));
62新增:
63新增:
64新增: #endregion
65新增: #region 列名
66新增: /// <summary>
67新增: /// 样式类型
68新增: /// </summary>
69新增: public string ColumnName
70新增: {
71新增: get { return (string)GetValue(ColumnNameProperty); }
72新增: set { SetValue(ColumnNameProperty, value); }
73新增: }
74新增: public static readonly DependencyProperty ColumnNameProperty =
75新增: DependencyProperty.Register("ColumnName",
76新增: typeof(string),
77新增: typeof(ChartItemTypeColumn));
78新增:
79新增:
80新增: #endregion
81新增:
82新增: private bool isRendering = false;
83新增: private Rectangle ValueBlockObj;
84新增: private Grid ValueContainer;
85新增:
86新增: public ChartItemTypeColumn()
87新增: {
88新增: DefaultStyleKey = typeof(ChartItemTypeColumn);
89新增: }
90新增:
91新增: public override void OnApplyTemplate()
92新增: {
93新增: base.OnApplyTemplate();
94新增: ValueBlockObj = GetTemplateChild("ValueBlockObj") as Rectangle;
95新增: ValueContainer = GetTemplateChild("ValueContainer") as Grid;
96新增:
97新增: Loaded += ChartItemTypeColumn_Loaded;
98新增: }
99新增:
100新增: private void ChartItemTypeColumn_Loaded(object sender, RoutedEventArgs e)
101新增: {
102新增: Render();
103新增:
104新增: }
105新增:
106新增:
107新增: private void Render()
108新增: {
109新增: if (isRendering)
110新增: {
111新增: return;
112新增: }
113新增:
114新增: if (!string.IsNullOrEmpty(Color))
115新增: {
116新增: ValueBlockObj.Fill = Colors.GetFromString(Color);
117新增: }
118新增: //isRendering = true;
119新增:
120新增: Update();
121新增: //this.SizeChanged += (e, c) =>
122新增: //{
123新增: // if (MaxValue <= 0)
124新增: // {
125新增: // return;
126新增: // }
127新增: // Update();
128新增: //};
129新增: }
130新增:
131新增: public void Update()
132新增: {
133新增:
134新增: ValueBlockObj.Height = (Value / MaxValue) * (ValueContainer.ActualHeight);
135新增: }
136新增:
137新增: protected override void OnMouseEnter(MouseEventArgs e)
138新增: {
139新增: base.OnMouseEnter(e);
140新增: VisualStateManager.GoToState(this, "MouseOver", true);
141新增: }
142新增: protected override void OnMouseLeave(MouseEventArgs e)
143新增: {
144新增: base.OnMouseLeave(e);
145新增: VisualStateManager.GoToState(this, "NormalState", true);
146新增: }
147新增: }
148新增:}
修改UI/Controls/Charts/Charts.cs+275 −3看文件
@@ -1,4 +1,5 @@
1删除:using System;
1新增:using Core.Librarys;
2新增:using System;
23using System.Collections.Generic;
34using System.Diagnostics;
45using System.Linq;
@@ -158,6 +159,142 @@ namespace UI.Controls.Charts
158159
159160
160161 #endregion
162新增: #region 柱状图信息数据
163新增: /// <summary>
164新增: /// 柱状图信息数据
165新增: /// </summary>
166新增: public List<ChartColumnInfoModel> ColumnInfoList
167新增: {
168新增: get { return (List<ChartColumnInfoModel>)GetValue(ColumnInfoListProperty); }
169新增: set { SetValue(ColumnInfoListProperty, value); }
170新增: }
171新增: public static readonly DependencyProperty ColumnInfoListProperty =
172新增: DependencyProperty.Register("ColumnInfoList",
173新增: typeof(List<ChartColumnInfoModel>),
174新增: typeof(Charts)
175新增: );
176新增:
177新增:
178新增: #endregion
179新增: #region 中间值
180新增: /// <summary>
181新增: /// 中间值
182新增: /// </summary>
183新增: public string Median
184新增: {
185新增: get { return (string)GetValue(MedianProperty); }
186新增: set { SetValue(MedianProperty, value); }
187新增: }
188新增: public static readonly DependencyProperty MedianProperty =
189新增: DependencyProperty.Register("Median",
190新增: typeof(string),
191新增: typeof(Charts)
192新增: );
193新增:
194新增:
195新增: #endregion
196新增: #region 最大值
197新增: /// <summary>
198新增: /// 最大值
199新增: /// </summary>
200新增: public string Maximum
201新增: {
202新增: get { return (string)GetValue(MaximumProperty); }
203新增: set { SetValue(MaximumProperty, value); }
204新增: }
205新增: public static readonly DependencyProperty MaximumProperty =
206新增: DependencyProperty.Register("Maximum",
207新增: typeof(string),
208新增: typeof(Charts)
209新增: );
210新增:
211新增:
212新增: #endregion
213新增: #region 单位
214新增: /// <summary>
215新增: /// 单位
216新增: /// </summary>
217新增: public string Unit
218新增: {
219新增: get { return (string)GetValue(UnitProperty); }
220新增: set { SetValue(UnitProperty, value); }
221新增: }
222新增: public static readonly DependencyProperty UnitProperty =
223新增: DependencyProperty.Register("Unit",
224新增: typeof(string),
225新增: typeof(Charts)
226新增: );
227新增:
228新增:
229新增: #endregion
230新增: #region 总计
231新增: /// <summary>
232新增: /// 总计
233新增: /// </summary>
234新增: public string Total
235新增: {
236新增: get { return (string)GetValue(TotalProperty); }
237新增: set { SetValue(TotalProperty, value); }
238新增: }
239新增: public static readonly DependencyProperty TotalProperty =
240新增: DependencyProperty.Register("Total",
241新增: typeof(string),
242新增: typeof(Charts)
243新增: );
244新增:
245新增:
246新增: #endregion
247新增:
248新增: #region 数据值类型
249新增: /// <summary>
250新增: /// 数据值类型
251新增: /// </summary>
252新增: public ChartDataValueType DataValueType
253新增: {
254新增: get { return (ChartDataValueType)GetValue(DataValueTypeProperty); }
255新增: set { SetValue(DataValueTypeProperty, value); }
256新增: }
257新增: public static readonly DependencyProperty DataValueTypeProperty =
258新增: DependencyProperty.Register("DataValueType",
259新增: typeof(ChartDataValueType),
260新增: typeof(Charts)
261新增: );
262新增:
263新增:
264新增: #endregion
265新增: #region
266新增:
267新增: public int NameIndexStart
268新增: {
269新增: get { return (int)GetValue(NameIndexStartProperty); }
270新增: set { SetValue(NameIndexStartProperty, value); }
271新增: }
272新增: public static readonly DependencyProperty NameIndexStartProperty =
273新增: DependencyProperty.Register("NameIndexStart",
274新增: typeof(int),
275新增: typeof(Charts), new PropertyMetadata((int)0)
276新增: );
277新增:
278新增:
279新增: #endregion
280新增: #region 是否空数据
281新增: /// <summary>
282新增: /// 是否空数据
283新增: /// </summary>
284新增: public bool IsEmpty
285新增: {
286新增: get { return (bool)GetValue(IsEmptyProperty); }
287新增: set { SetValue(IsEmptyProperty, value); }
288新增: }
289新增: public static readonly DependencyProperty IsEmptyProperty =
290新增: DependencyProperty.Register("IsEmpty",
291新增: typeof(bool),
292新增: typeof(Charts),
293新增: new PropertyMetadata(false, new PropertyChangedCallback(OnPropertyChanged)));
294新增:
295新增:
296新增: #endregion
297新增:
161298 private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
162299 {
163300 var charts = (d as Charts);
@@ -191,6 +328,7 @@ namespace UI.Controls.Charts
191328 private WrapPanel CardContainer;
192329 private Grid MonthContainer;
193330 private ScrollViewer ScrollViewer;
331新增: private Grid ColumnContainer;
194332 /// <summary>
195333 /// 是否在渲染中
196334 /// </summary>
@@ -224,6 +362,7 @@ namespace UI.Controls.Charts
224362 MonthContainer = GetTemplateChild("MonthContainer") as Grid;
225363 ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
226364 NoScrollContainer = GetTemplateChild("NoScrollContainer") as StackPanel;
365新增: ColumnContainer = GetTemplateChild("ColumnContainer") as Grid;
227366
228367 if (IsLoading)
229368 {
@@ -273,7 +412,7 @@ namespace UI.Controls.Charts
273412 }
274413 private void Calculate()
275414 {
276删除: if (Data == null)
415新增: if (Data == null || ChartsType == ChartsType.Column)
277416 {
278417 return;
279418 }
@@ -295,7 +434,7 @@ namespace UI.Controls.Charts
295434
296435 private void Render()
297436 {
298删除: if (isRendering || Container == null || CardContainer == null)
437新增: if (isRendering || Container == null || CardContainer == null || ColumnContainer == null)
299438 {
300439 return;
301440 }
@@ -315,14 +454,20 @@ namespace UI.Controls.Charts
315454 CardContainer.Children.Clear();
316455 MonthContainer.Children.Clear();
317456 NoScrollContainer.Children.Clear();
457新增: ColumnContainer.Children.Clear();
318458
319459 if (Data == null || Data.Count() <= 0)
320460 {
321461 Container.Children.Add(new EmptyData());
322462 NoScrollContainer.Children.Add(new EmptyData());
323463 CardContainer.Children.Add(new EmptyData());
464新增: IsEmpty = true;
324465 return;
325466 }
467新增: else
468新增: {
469新增: IsEmpty = false;
470新增: }
326471
327472 isRendering = true;
328473 switch (ChartsType)
@@ -336,6 +481,9 @@ namespace UI.Controls.Charts
336481 case ChartsType.Month:
337482 RenderMonthStyle();
338483 break;
484新增: case ChartsType.Column:
485新增: RenderColumnStyle();
486新增: break;
339487 }
340488
341489 }
@@ -615,6 +763,130 @@ namespace UI.Controls.Charts
615763 }
616764 #endregion
617765
766新增: #region 渲染柱形图
767新增: private void RenderColumnStyle()
768新增: {
769新增: ColumnContainer.Children.Clear();
770新增: ColumnInfoList = new List<ChartColumnInfoModel>();
771新增: ColumnContainer.ColumnDefinitions.Clear();
772新增: maxValue = 0;
773新增:
774新增: Maximum = string.Empty;
775新增: Median = string.Empty;
776新增: Total = string.Empty;
777新增:
778新增: if (Data == null || Data.Count() == 0)
779新增: {
780新增: return;
781新增: }
782新增:
783新增:
784新增:
785新增:
786新增: double total = 0;
787新增: // 查找最大值
788新增: foreach (var item in Data)
789新增: {
790新增: // 查找最大值
791新增: double max = item.Values.Max();
792新增: if (max > maxValue)
793新增: {
794新增: maxValue = max;
795新增: }
796新增:
797新增: total += item.Values.Sum();
798新增:
799新增: }
800新增:
801新增: Maximum = Covervalue(maxValue);
802新增:
803新增: Median = Covervalue((maxValue / 2));
804新增:
805新增: Total = Covervalue(total);
806新增:
807新增: int margin = 5;
808新增:
809新增:
810新增:
811新增: // 创建列
812新增: int columns = Data.FirstOrDefault().Values.Length;
813新增:
814新增:
815新增: // 调整间距
816新增: if (columns <= 7)
817新增: {
818新增: margin = 25;
819新增: }
820新增: else if (columns <= 12)
821新增: {
822新增: margin = 15;
823新增: }
824新增: else if (columns >= 20)
825新增: {
826新增: margin = 2;
827新增: }
828新增:
829新增: int columnCount = Data.Count();
830新增:
831新增: var list = Data.ToList();
832新增:
833新增: for (int i = 0; i < columns; i++)
834新增: {
835新增: ColumnContainer.ColumnDefinitions.Add(new ColumnDefinition()
836新增: {
837新增: Width = new GridLength(1, GridUnitType.Star)
838新增: });
839新增:
840新增:
841新增: for (int di = 0; di < columnCount; di++)
842新增: {
843新增: var item = list[di];
844新增: item.Color = item.Color == null ? UI.Base.Color.Colors.MainColors[di] : item.Color;
845新增: var column = new ChartItemTypeColumn();
846新增: column.Value = item.Values[i];
847新增: column.MaxValue = maxValue;
848新增: column.Margin = new Thickness(margin, 0, margin, 0);
849新增:
850新增: column.Color = item.Color;
851新增: column.ColumnName = item.ColumnNames != null && item.ColumnNames.Length > 0 ? item.ColumnNames[i] : (i + NameIndexStart).ToString();
852新增: Panel.SetZIndex(column, column.Value > 0 ? -(int)column.Value : 0);
853新增: Grid.SetColumn(column, i);
854新增: ColumnContainer.Children.Add(column);
855新增: }
856新增:
857新增:
858新增: }
859新增:
860新增: var infoList = new List<ChartColumnInfoModel>();
861新增:
862新增: foreach (var item in list)
863新增: {
864新增: infoList.Add(new ChartColumnInfoModel()
865新增: {
866新增: Color = item.Color,
867新增: Name = item.Name,
868新增: Icon = item.Icon,
869新增: Text = Covervalue(item.Values.Sum()) + Unit
870新增: });
871新增: }
872新增:
873新增: ColumnInfoList = infoList;
874新增:
875新增: isRendering = false;
876新增: }
877新增: #endregion
878新增:
879新增: private string Covervalue(double value)
880新增: {
881新增: if (DataValueType == ChartDataValueType.Seconds)
882新增: {
883新增: return Time.ToString((int)value);
884新增: }
885新增: else
886新增: {
887新增: return value.ToString();
888新增: }
889新增: }
618890
619891 private void HandleItemClick(UIElement el, ChartsDataModel data)
620892 {
修改UI/Controls/Charts/ChartsType.cs+5 −1看文件
@@ -22,6 +22,10 @@ namespace UI.Controls.Charts
2222 /// <summary>
2323 /// 月份
2424 /// </summary>
25删除: Month = 3
25新增: Month = 3,
26新增: /// <summary>
27新增: /// 柱形图
28新增: /// </summary>
29新增: Column = 4,
2630 }
2731}
新增UI/Controls/Charts/Model/ChartColumnInfoModel.cs+17 −0看文件
@@ -0,0 +1,17 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:
7新增:namespace UI.Controls.Charts.Model
8新增:{
9新增: public class ChartColumnInfoModel
10新增: {
11新增: public string Color { get; set; }
12新增: public string Name { get; set; }
13新增: public string Icon { get; set; }
14新增: public string Text { get; set; }
15新增:
16新增: }
17新增:}
修改UI/Controls/Charts/Model/ChartsDataModel.cs+13 −0看文件
@@ -43,5 +43,18 @@ namespace UI.Controls.Charts.Model
4343 /// 数据模型
4444 /// </summary>
4545 public object Data { get; set; }
46新增:
47新增: /// <summary>
48新增: /// 值
49新增: /// </summary>
50新增: public double[] Values { get; set; }
51新增: /// <summary>
52新增: /// 列名
53新增: /// </summary>
54新增: public string[] ColumnNames { get; set; }
55新增: /// <summary>
56新增: /// 颜色
57新增: /// </summary>
58新增: public string Color { get; set; }
4659 }
4760}
新增UI/Controls/Converters/HextoColorConverter.cs+25 −0看文件
@@ -0,0 +1,25 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Globalization;
4新增:using System.Linq;
5新增:using System.Text;
6新增:using System.Threading.Tasks;
7新增:using System.Windows.Data;
8新增:using System.Windows.Media;
9新增:
10新增:namespace UI.Controls.Converters
11新增:{
12新增: [ValueConversion(typeof(string), typeof(Brush))]
13新增: public class HextoColorConverter : IValueConverter
14新增: {
15新增: public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
16新增: {
17新增: return UI.Base.Color.Colors.GetFromString(value.ToString());
18新增: }
19新增:
20新增: public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
21新增: {
22新增: throw new NotImplementedException();
23新增: }
24新增: }
25新增:}
新增UI/Controls/Converters/ToStringConverter.cs+25 −0看文件
@@ -0,0 +1,25 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Globalization;
4新增:using System.Linq;
5新增:using System.Text;
6新增:using System.Threading.Tasks;
7新增:using System.Windows.Data;
8新增:using System.Windows.Media;
9新增:
10新增:namespace UI.Controls.Converters
11新增:{
12新增: [ValueConversion(typeof(object), typeof(string))]
13新增: public class ToStringConverter : IValueConverter
14新增: {
15新增: public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
16新增: {
17新增: return value.ToString();
18新增: }
19新增:
20新增: public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
21新增: {
22新增: throw new NotImplementedException();
23新增: }
24新增: }
25新增:}
新增UI/Controls/Select/DateSelect.cs+302 −0看文件
@@ -0,0 +1,302 @@
1新增:using Core.Librarys;
2新增:using System;
3新增:using System.Collections.Generic;
4新增:using System.Diagnostics;
5新增:using System.Linq;
6新增:using System.Runtime.InteropServices;
7新增:using System.Text;
8新增:using System.Threading.Tasks;
9新增:using System.Windows;
10新增:using System.Windows.Controls;
11新增:using System.Windows.Controls.Primitives;
12新增:using System.Windows.Input;
13新增:using System.Windows.Shapes;
14新增:using UI.Controls.DatePickerBar;
15新增:
16新增:namespace UI.Controls.Select
17新增:{
18新增: public class DateSelect : Control
19新增: {
20新增: public DateSelectType SelectType
21新增: {
22新增: get { return (DateSelectType)GetValue(SelectTypeProperty); }
23新增: set { SetValue(SelectTypeProperty, value); }
24新增: }
25新增: public static readonly DependencyProperty SelectTypeProperty =
26新增: DependencyProperty.Register("SelectType",
27新增: typeof(DateSelectType),
28新增: typeof(DateSelect),
29新增: new PropertyMetadata(DateSelectType.Day)
30新增: );
31新增: public DateTime Date
32新增: {
33新增: get { return (DateTime)GetValue(DateProperty); }
34新增: set { SetValue(DateProperty, value); }
35新增: }
36新增: public static readonly DependencyProperty DateProperty =
37新增: DependencyProperty.Register("Date",
38新增: typeof(DateTime),
39新增: typeof(DateSelect),
40新增: new PropertyMetadata(DateTime.Now)
41新增: );
42新增:
43新增: public int Year
44新增: {
45新增: get { return (int)GetValue(YearProperty); }
46新增: set { SetValue(YearProperty, value); }
47新增: }
48新增: public static readonly DependencyProperty YearProperty =
49新增: DependencyProperty.Register("Year",
50新增: typeof(int),
51新增: typeof(DateSelect)
52新增: );
53新增:
54新增: public int Month
55新增: {
56新增: get { return (int)GetValue(MonthProperty); }
57新增: set { SetValue(MonthProperty, value); }
58新增: }
59新增: public static readonly DependencyProperty MonthProperty =
60新增: DependencyProperty.Register("Month",
61新增: typeof(int),
62新增: typeof(DateSelect)
63新增: );
64新增:
65新增: public string Day
66新增: {
67新增: get { return (string)GetValue(DayProperty); }
68新增: set { SetValue(DayProperty, value); }
69新增: }
70新增: public static readonly DependencyProperty DayProperty =
71新增: DependencyProperty.Register("Day",
72新增: typeof(string),
73新增: typeof(DateSelect)
74新增: );
75新增: public string DateStr
76新增: {
77新增: get { return (string)GetValue(DateStrProperty); }
78新增: set { SetValue(DateStrProperty, value); }
79新增: }
80新增: public static readonly DependencyProperty DateStrProperty =
81新增: DependencyProperty.Register("DateStr",
82新增: typeof(string),
83新增: typeof(DateSelect)
84新增: );
85新增: public List<string> Days
86新增: {
87新增: get { return (List<string>)GetValue(DaysProperty); }
88新增: set { SetValue(DaysProperty, value); }
89新增: }
90新增: public static readonly DependencyProperty DaysProperty =
91新增: DependencyProperty.Register("Days",
92新增: typeof(List<string>),
93新增: typeof(DateSelect)
94新增: );
95新增:
96新增: public bool IsOpen
97新增: {
98新增: get { return (bool)GetValue(IsOpenProperty); }
99新增: set { SetValue(IsOpenProperty, value); }
100新增: }
101新增: public static readonly DependencyProperty IsOpenProperty =
102新增: DependencyProperty.Register("IsOpen",
103新增: typeof(bool),
104新增: typeof(DateSelect), new PropertyMetadata(new PropertyChangedCallback(OnPropertyChanged)));
105新增:
106新增: private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
107新增: {
108新增: var control = d as DateSelect;
109新增: if (e.Property == IsOpenProperty)
110新增: {
111新增: control.HandleHook();
112新增: }
113新增: }
114新增:
115新增: private Win32API.LowLevelKeyboardProc mouseProc;
116新增: private static IntPtr hookMouseID = IntPtr.Zero;
117新增: private IntPtr hook;
118新增: public Command ShowSelectCommand { get; set; }
119新增: public Command SetYearCommand { get; set; }
120新增: public Command SetMonthCommand { get; set; }
121新增: public Command DoneCommand { get; set; }
122新增:
123新增: private bool IsFirstClick = false;
124新增: private Border SelectContainer;
125新增: public DateSelect()
126新增: {
127新增: DefaultStyleKey = typeof(DateSelect);
128新增:
129新增: ShowSelectCommand = new Command(new Action<object>(OnShowSelect));
130新增: SetYearCommand = new Command(new Action<object>(OnSetYear));
131新增: SetMonthCommand = new Command(new Action<object>(OnSetMonth));
132新增: DoneCommand = new Command(new Action<object>(OnDone));
133新增:
134新增: MouseLeftButtonUp += Select_MouseLeftButtonUp;
135新增:
136新增: Year = Date.Year;
137新增:
138新增: Month = Date.Month;
139新增:
140新增: Day = Date.Day.ToString();
141新增:
142新增: mouseProc = HookCallback;
143新增:
144新增: Unloaded += DateSelect_Unloaded;
145新增:
146新增: }
147新增:
148新增:
149新增:
150新增: private void DateSelect_Unloaded(object sender, RoutedEventArgs e)
151新增: {
152新增: Win32API.UnhookWindowsHookEx(hook);
153新增: }
154新增:
155新增: private void HandleHook()
156新增: {
157新增: if (IsOpen)
158新增: {
159新增: // 设置键盘钩子
160新增: hook = Win32API.SetMouseHook(mouseProc);
161新增: }
162新增: else
163新增: {
164新增: Win32API.UnhookWindowsHookEx(hook);
165新增: }
166新增: }
167新增: private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
168新增: {
169新增:
170新增: if (nCode >= 0)
171新增: {
172新增: if (wParam == (IntPtr)Win32API.WM_LBUTTONDBLCLK || wParam == (IntPtr)Win32API.WM_WHEEL)
173新增: {
174新增: if (!IsFirstClick)
175新增: {
176新增: bool isInControl = IsInControl();
177新增:
178新增: if (!isInControl)
179新增: {
180新增: IsOpen = false;
181新增: }
182新增: }
183新增: IsFirstClick = false;
184新增: }
185新增:
186新增: }
187新增:
188新增: return Win32API.CallNextHookEx(hookMouseID, nCode, wParam, lParam);
189新增: }
190新增: private bool IsInControl()
191新增: {
192新增: var p = Mouse.GetPosition(SelectContainer);
193新增: if (p.X < 0 || p.Y < 0 || p.X > SelectContainer.ActualWidth || p.Y > SelectContainer.ActualHeight)
194新增: {
195新增: return false;
196新增: }
197新增:
198新增:
199新增: return true;
200新增: }
201新增: private void OnDone(object obj)
202新增: {
203新增: Date = new DateTime(Year, Month, int.Parse(Day));
204新增:
205新增: UpdateDateStr();
206新增:
207新增: IsOpen = false;
208新增: }
209新增:
210新增: private void OnSetMonth(object obj)
211新增: {
212新增: int newMonth = Month + int.Parse(obj.ToString());
213新增: if (newMonth < 1 || newMonth > 12)
214新增: {
215新增: return;
216新增: }
217新增: Month = newMonth;
218新增:
219新增: Day = "1";
220新增:
221新增: UpdateDays();
222新增:
223新增:
224新增: }
225新增:
226新增: private void OnSetYear(object obj)
227新增: {
228新增: int newYear = Year + int.Parse(obj.ToString());
229新增: if (newYear < 2020 || newYear > DateTime.Now.Year)
230新增: {
231新增: return;
232新增: }
233新增: Year = newYear;
234新增:
235新增: Day = "1";
236新增:
237新增: UpdateDays();
238新增: }
239新增:
240新增: private void OnShowSelect(object obj)
241新增: {
242新增: IsOpen = true;
243新增:
244新增: IsFirstClick = true;
245新增: }
246新增:
247新增: private void SelectContainer_Loaded(object sender, RoutedEventArgs e)
248新增: {
249新增: Debug.WriteLine("加载");
250新增: }
251新增:
252新增: public override void OnApplyTemplate()
253新增: {
254新增: base.OnApplyTemplate();
255新增:
256新增: SelectContainer = GetTemplateChild("SelectContainer") as Border;
257新增:
258新增: UpdateDays();
259新增:
260新增: UpdateDateStr();
261新增:
262新增:
263新增: }
264新增:
265新增:
266新增: private void Select_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
267新增: {
268新增: }
269新增:
270新增: private void UpdateDays()
271新增: {
272新增: var list = new List<string>();
273新增: int days = DateTime.DaysInMonth(Year, Month);
274新增: for (int i = 1; i < days + 1; i++)
275新增: {
276新增: list.Add(i.ToString());
277新增: }
278新增: Days = list;
279新增:
280新增: }
281新增:
282新增: private void UpdateDateStr()
283新增: {
284新增: DateStr = Date.ToString("yyyy年MM月dd日");
285新增: if (Date.Date == DateTime.Now.Date)
286新增: {
287新增: DateStr = "今天";
288新增: }
289新增: if (SelectType == DateSelectType.Month)
290新增: {
291新增: DateStr = Date.ToString("yyyy年MM月");
292新增:
293新增: }
294新增: else if (SelectType == DateSelectType.Year)
295新增: {
296新增: DateStr = Date.ToString("yyyy年");
297新增:
298新增: }
299新增: }
300新增: }
301新增:
302新增:}
新增UI/Controls/Select/DateSelectType.cs+15 −0看文件
@@ -0,0 +1,15 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:
7新增:namespace UI.Controls.Select
8新增:{
9新增: public enum DateSelectType
10新增: {
11新增: Day,
12新增: Month,
13新增: Year,
14新增: }
15新增:}
修改UI/Controls/Select/Option.cs+9 −0看文件
@@ -10,6 +10,15 @@ namespace UI.Controls.Select
1010{
1111 public class Option : Control
1212 {
13新增: public bool IsShowIcon
14新增: {
15新增: get { return (bool)GetValue(IsShowIconProperty); }
16新增: set { SetValue(IsShowIconProperty, value); }
17新增: }
18新增: public static readonly DependencyProperty IsShowIconProperty =
19新增: DependencyProperty.Register("IsShowIcon",
20新增: typeof(bool),
21新增: typeof(Option), new PropertyMetadata(true));
1322 public bool IsChecked
1423 {
1524 get { return (bool)GetValue(IsCheckedProperty); }
修改UI/Controls/Select/Select.cs+14 −0看文件
@@ -10,6 +10,15 @@ namespace UI.Controls.Select
1010{
1111 public class Select : Control
1212 {
13新增: public bool IsShowIcon
14新增: {
15新增: get { return (bool)GetValue(IsShowIconProperty); }
16新增: set { SetValue(IsShowIconProperty, value); }
17新增: }
18新增: public static readonly DependencyProperty IsShowIconProperty =
19新增: DependencyProperty.Register("IsShowIcon",
20新增: typeof(bool),
21新增: typeof(Select), new PropertyMetadata(true));
1322 public bool IsOpen
1423 {
1524 get { return (bool)GetValue(IsOpenProperty); }
@@ -84,6 +93,7 @@ namespace UI.Controls.Select
8493 {
8594 var option = new Option();
8695 option.Value = item;
96新增: option.IsShowIcon = IsShowIcon;
8797 option.IsChecked = SelectedItem?.Name == item.Name;
8898 option.MouseLeftButtonUp += Option_MouseLeftButtonUp; ;
8999 _optionsContainer.Children.Add(option);
@@ -102,6 +112,10 @@ namespace UI.Controls.Select
102112
103113 private void OnSelectedItemChange()
104114 {
115新增: if (_optionsContainer == null || SelectedItem == null)
116新增: {
117新增: return;
118新增: }
105119 foreach (Option option in _optionsContainer.Children)
106120 {
107121 option.IsChecked = SelectedItem.Name == option.Value.Name;
修改UI/Librays/Image/Imager.cs+4 −4看文件
@@ -15,13 +15,13 @@ namespace Core.Librarys.Image
1515{
1616 public class Imager
1717 {
18删除: public static BitmapImage Load(string filePath)
18新增: public static BitmapImage Load(string filePath, string defaultPath = "pack://application:,,,/Tai;component/Resources/Icons/defaultIcon.png")
1919 {
2020 try
2121 {
22删除: if (filePath == null)
22新增: if (string.IsNullOrEmpty(filePath))
2323 {
24删除: return null;
24新增: throw new ArgumentNullException(nameof(filePath));
2525 }
2626
2727 var bitmap = new BitmapImage();
@@ -63,7 +63,7 @@ namespace Core.Librarys.Image
6363 var bitmap = new BitmapImage();
6464 bitmap.BeginInit();
6565
66删除: StreamResourceInfo info = Application.GetResourceStream(new Uri("pack://application:,,,/Tai;component/Resources/Icons/defaultIcon.png", UriKind.RelativeOrAbsolute));
66新增: StreamResourceInfo info = Application.GetResourceStream(new Uri(defaultPath, UriKind.RelativeOrAbsolute));
6767 using (var st = info.Stream)
6868 {
6969 bitmap.StreamSource = st;
新增UI/Models/ChartPageModel.cs+81 −0看文件
@@ -0,0 +1,81 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Collections.ObjectModel;
4新增:using System.Linq;
5新增:using System.Text;
6新增:using System.Threading.Tasks;
7新增:using UI.Controls.Charts.Model;
8新增:using UI.Controls.Select;
9新增:
10新增:namespace UI.Models
11新增:{
12新增: public class ChartPageModel : ModelBase
13新增: {
14新增: private List<ChartsDataModel> Data_;
15新增:
16新增: public List<ChartsDataModel> Data
17新增: {
18新增: get
19新增: {
20新增: return Data_;
21新增: }
22新增: set
23新增: {
24新增: Data_ = value;
25新增: OnPropertyChanged();
26新增: }
27新增: }
28新增:
29新增: private ObservableCollection<string> TabbarData_;
30新增: /// <summary>
31新增: /// tabbar data
32新增: /// </summary>
33新增: public ObservableCollection<string> TabbarData
34新增: {
35新增: get { return TabbarData_; }
36新增: set { TabbarData_ = value; OnPropertyChanged(); }
37新增: }
38新增:
39新增: private int TabbarSelectedIndex_;
40新增: /// <summary>
41新增: /// tabbar selected item index
42新增: /// </summary>
43新增: public int TabbarSelectedIndex
44新增: {
45新增: get { return TabbarSelectedIndex_; }
46新增: set
47新增: {
48新增: TabbarSelectedIndex_ = value;
49新增: OnPropertyChanged();
50新增: }
51新增: }
52新增: private string WeekDateStr_;
53新增: public string WeekDateStr { get { return WeekDateStr_; } set { WeekDateStr_ = value; OnPropertyChanged(); } }
54新增: private DateTime Date_;
55新增: public DateTime Date { get { return Date_; } set { Date_ = value; OnPropertyChanged(); } }
56新增:
57新增: private List<SelectItemModel> WeekOptions_;
58新增:
59新增: public List<SelectItemModel> WeekOptions { get { return WeekOptions_; } set { WeekOptions_ = value; OnPropertyChanged(); } }
60新增:
61新增: private SelectItemModel SelectedWeek_;
62新增:
63新增: public SelectItemModel SelectedWeek { get { return SelectedWeek_; } set { SelectedWeek_ = value; OnPropertyChanged(); } }
64新增:
65新增: private DateTime MonthDate_;
66新增: public DateTime MonthDate { get { return MonthDate_; } set { MonthDate_ = value; OnPropertyChanged(); } }
67新增:
68新增: private DateTime YearDate_;
69新增: public DateTime YearDate { get { return YearDate_; } set { YearDate_ = value; OnPropertyChanged(); } }
70新增:
71新增: private int NameIndexStart_ = 0;
72新增: public int NameIndexStart { get { return NameIndexStart_; } set { NameIndexStart_ = value; OnPropertyChanged(); } }
73新增:
74新增: private List<ChartsDataModel> TopData_;
75新增: public List<ChartsDataModel> TopData
76新增: {
77新增: get { return TopData_; }
78新增: set { TopData_ = value; OnPropertyChanged(); }
79新增: }
80新增: }
81新增:}
修改UI/Themes/Base/EmptyData.xaml+36 −8看文件
@@ -13,16 +13,44 @@
1313 <ControlTemplate TargetType="{x:Type local:EmptyData}">
1414 <Border >
1515
16删除: <StackPanel>
16新增: <Grid>
17新增: <Grid.RowDefinitions>
18新增: <RowDefinition Height="auto"/>
19新增: <RowDefinition Height="auto"/>
20新增: </Grid.RowDefinitions>
1721 <Grid>
18删除: <local:Icon IconType="Preview" FontSize="100" Foreground="Gray" RenderTransformOrigin=".5,.5" Opacity=".3">
19删除: <local:Icon.RenderTransform>
20删除: <RotateTransform Angle="90" />
21删除: </local:Icon.RenderTransform>
22删除: </local:Icon>
22新增: <Border Background="White" BorderThickness="4" CornerRadius="10" Width="100" Height="100">
23新增: <Border.RenderTransform>
24新增: <RotateTransform Angle="5"/>
25新增: </Border.RenderTransform>
26新增: <Border.Effect>
27新增: <DropShadowEffect Color="#d8d2d2" BlurRadius="10" Direction="300" ShadowDepth="4" Opacity="0.1" RenderingBias="Performance" ></DropShadowEffect>
28新增: </Border.Effect>
29新增: <StackPanel>
30新增: <Border Background="#c4c4c4" BorderThickness="4" CornerRadius="6" Height="20" Margin="5"/>
31新增: <Border Background="#f0f0f0" BorderThickness="4" CornerRadius="6" Height="40" Margin="5"/>
32新增: </StackPanel>
33新增:
34新增: </Border>
35新增: <Border HorizontalAlignment="Left" Margin="30,0,0,30" Background="White" BorderThickness="4" CornerRadius="10" Width="100" Height="100">
36新增:
37新增: <Border.Effect>
38新增: <DropShadowEffect Color="#d8d2d2" BlurRadius="10" Direction="300" ShadowDepth="4" Opacity="0.1" RenderingBias="Performance" ></DropShadowEffect>
39新增: </Border.Effect>
40新增: <StackPanel>
41新增: <Border Background="#c4c4c4" BorderThickness="4" CornerRadius="6" Height="20" Margin="5"/>
42新增: <Border Background="#f0f0f0" BorderThickness="4" CornerRadius="6" Height="40" Margin="5">
43新增: <TextBlock Foreground="Gray" Opacity=".4" Text="Tai" FontSize="10" VerticalAlignment="Center" HorizontalAlignment="Center"/>
44新增: </Border>
45新增: </StackPanel>
46新增:
47新增: </Border>
2348 </Grid>
24删除: <TextBlock Text="暂时没有数据" HorizontalAlignment="Center" Foreground="Gray" Opacity=".3"/>
25删除: </StackPanel>
49新增: <Border Grid.Row="1" Margin="0,10,0,0">
50新增: <TextBlock VerticalAlignment="Center" Text="暂时没有数据" FontSize="12" Margin="0,10" HorizontalAlignment="Center" Foreground="Gray" Opacity=".7"/>
51新增:
52新增: </Border>
53新增: </Grid>
2654
2755 </Border>
2856
新增UI/Themes/Base/View.xaml+20 −0看文件
@@ -0,0 +1,20 @@
1新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3新增: xmlns:local="clr-namespace:UI.Controls.Base">
4新增: <Style TargetType="{x:Type local:View}">
5新增: <Setter Property="SnapsToDevicePixels"
6新增: Value="true" />
7新增: <Setter Property="Background" Value="Transparent"/>
8新增:
9新增: <Setter Property="Template">
10新增: <Setter.Value>
11新增: <ControlTemplate TargetType="{x:Type local:View}">
12新增: <Border Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
13新增: <ContentPresenter/>
14新增: </Border>
15新增:
16新增: </ControlTemplate>
17新增: </Setter.Value>
18新增: </Setter>
19新增: </Style>
20新增:</ResourceDictionary>
文件末尾没有换行
修改UI/Themes/Charts/Charts.xaml+134 −1看文件
@@ -1,6 +1,7 @@
11<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3删除: xmlns:local="clr-namespace:UI.Controls.Charts">
3新增: xmlns:local="clr-namespace:UI.Controls.Charts" xmlns:base="clr-namespace:UI.Controls.Base" xmlns:converter="clr-namespace:UI.Controls.Converters">
4新增: <converter:HextoColorConverter x:Key="HextoColorConverter"/>
45 <Style TargetType="{x:Type local:Charts}">
56 <Setter Property="SnapsToDevicePixels"
67 Value="true" />
@@ -28,10 +29,138 @@
2829 <Grid x:Name="MonthContainer">
2930 </Grid>
3031 </Grid>
32新增:
33新增: <Grid x:Name="Column" Visibility="Collapsed">
34新增: <Grid x:Name="ColumnEmpty" Visibility="Collapsed">
35新增: <base:EmptyData/>
36新增: </Grid>
37新增: <Grid x:Name="ColumnMain">
38新增: <Grid.RowDefinitions>
39新增: <RowDefinition Height="auto"/>
40新增: <RowDefinition Height="*"/>
41新增: <RowDefinition Height="auto"/>
42新增: </Grid.RowDefinitions>
43新增: <StackPanel>
44新增: <TextBlock Text="总计" Foreground="#626262"/>
45新增: <TextBlock Margin="0,10,0,0" Text="{TemplateBinding Total}" FontSize="20" Foreground="#1a1919"/>
46新增: </StackPanel>
47新增: <Grid Grid.Row="1" Margin="0,20,0,0">
48新增: <TextBlock Panel.ZIndex="2" Margin="0,-8,0,0" HorizontalAlignment="Right" VerticalAlignment="Top" Text="{TemplateBinding Maximum}" Foreground="#ccc" FontSize="12"/>
49新增:
50新增: <TextBlock Panel.ZIndex="2" HorizontalAlignment="Right" VerticalAlignment="Center" Text="{TemplateBinding Median}" Foreground="#ccc" FontSize="12"/>
51新增: <Line Stroke="#ccc" Opacity="1" HorizontalAlignment="Stretch"
52新增: X2="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"
53新增: StrokeDashArray="2 5" StrokeThickness=".8" VerticalAlignment="Center" Margin="10,0"/>
54新增:
55新增: <Line Stroke="#ccc" Opacity="1" HorizontalAlignment="Stretch"
56新增: X2="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"
57新增: StrokeDashArray="2 5" StrokeThickness=".8" VerticalAlignment="Top" Margin="10,0"/>
58新增:
59新增: <Border BorderThickness="1,0,0,1" BorderBrush="#eeeef2">
60新增: <Grid x:Name="ColumnContainer">
61新增:
62新增: </Grid>
63新增: </Border>
64新增: </Grid>
65新增: <!--信息-->
66新增: <Grid Grid.Row="2" Margin="0,5,0,0">
67新增: <ListView ItemsSource="{TemplateBinding ColumnInfoList}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
68新增: <ListBox.Resources>
69新增: <Style TargetType="{x:Type ListView}">
70新增: <Setter Property="OverridesDefaultStyle" Value="True"/>
71新增:
72新增: <Setter Property="Template">
73新增: <Setter.Value>
74新增: <ControlTemplate TargetType="{x:Type ListView}">
75新增: <Border>
76新增: <ItemsPresenter />
77新增: </Border>
78新增: </ControlTemplate>
79新增: </Setter.Value>
80新增: </Setter>
81新增: </Style>
82新增: <Style TargetType="{x:Type ListViewItem}">
83新增: <Setter Property="OverridesDefaultStyle" Value="True"/>
84新增: <Setter Property="Template">
85新增: <Setter.Value>
86新增: <ControlTemplate TargetType="{x:Type ListViewItem}">
87新增: <Border BorderBrush="Transparent" BorderThickness="2" x:Name="Border" Background="White" Margin="0" CornerRadius="10">
88新增:
89新增: <ContentPresenter/>
90新增: </Border>
91新增: <!--<ControlTemplate.Triggers>
92新增: <Trigger Property="IsMouseOver" Value="True">
93新增: -->
94新增: <!--<Setter TargetName="Border" Property="Background" Value="#FFE8E6FF"/>-->
95新增: <!--
96新增: <Setter TargetName="Border" Property="BorderBrush" Value="#2b20d9"/>
97新增:
98新增: </Trigger>
99新增: </ControlTemplate.Triggers>-->
100新增: </ControlTemplate>
101新增: </Setter.Value>
102新增: </Setter>
103新增:
104新增: </Style>
105新增: </ListBox.Resources>
106新增: <ListBox.ItemsPanel>
107新增: <ItemsPanelTemplate>
108新增: <WrapPanel/>
109新增: </ItemsPanelTemplate>
110新增: </ListBox.ItemsPanel>
111新增: <ListView.ItemTemplate>
112新增: <DataTemplate>
113新增:
114新增: <WrapPanel Orientation="Vertical">
115新增: <Border Width="auto" Height="30" Margin="0,0,10,0">
116新增: <Grid>
117新增: <Grid.ColumnDefinitions>
118新增: <ColumnDefinition Width="20"/>
119新增: <ColumnDefinition Width="30"/>
120新增: <ColumnDefinition Width="auto"/>
121新增: <ColumnDefinition Width="auto"/>
122新增:
123新增: </Grid.ColumnDefinitions>
124新增: <Border Width="12" CornerRadius="4" Height="12" Background="{Binding Color,Converter={StaticResource HextoColorConverter}}">
125新增: <!--颜色-->
126新增: </Border>
127新增: <Border Grid.Column="1">
128新增: <!--图标-->
129新增: <base:Img Width="20" Height="20" URL="{Binding Icon}"/>
130新增: </Border>
131新增: <Border Grid.Column="2" Margin="5,0,0,0">
132新增: <!--名称-->
133新增: <TextBlock Foreground="#5c5c5c" VerticalAlignment="Center" Text="{Binding Name}"/>
134新增: </Border>
135新增: <Border Grid.Column="3">
136新增: <!--总计和百分比-->
137新增: <TextBlock FontSize="12" Margin="5,0,0,0" Foreground="#FF8A8A8A" VerticalAlignment="Center" Text="{Binding Text}"/>
138新增:
139新增: </Border>
140新增:
141新增: </Grid>
142新增: </Border>
143新增:
144新增: </WrapPanel>
145新增: </DataTemplate>
146新增: </ListView.ItemTemplate>
147新增: </ListView>
148新增: </Grid>
149新增: </Grid>
150新增: </Grid>
31151 </Grid>
32152 </Border>
33153
34154 <ControlTemplate.Triggers>
155新增: <MultiTrigger>
156新增: <MultiTrigger.Conditions>
157新增: <Condition Property="IsEmpty" Value="True"/>
158新增: <Condition Property="ChartsType" Value="Column"/>
159新增: </MultiTrigger.Conditions>
160新增: <Setter Property="Visibility" Value="Visible" TargetName="ColumnEmpty"/>
161新增: <Setter Property="Visibility" Value="Collapsed" TargetName="ColumnMain"/>
162新增: </MultiTrigger>
163新增:
35164 <Trigger Property="ChartsType"
36165 Value="HorizontalA">
37166 <Setter TargetName="HorizontalA" Property="Visibility" Value="Visible"/>
@@ -44,6 +173,10 @@
44173 Value="Month">
45174 <Setter TargetName="Month" Property="Visibility" Value="Visible"/>
46175 </Trigger>
176新增: <Trigger Property="ChartsType"
177新增: Value="Column">
178新增: <Setter TargetName="Column" Property="Visibility" Value="Visible"/>
179新增: </Trigger>
47180 </ControlTemplate.Triggers>
48181 </ControlTemplate>
49182 </Setter.Value>
新增UI/Themes/Charts/ChartsItemTypeColumn.xaml+94 −0看文件
@@ -0,0 +1,94 @@
1新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3新增: xmlns:local="clr-namespace:UI.Controls.Charts"
4新增: xmlns:base="clr-namespace:UI.Controls.Base">
5新增: <Style TargetType="{x:Type local:ChartItemTypeColumn}">
6新增: <Setter Property="SnapsToDevicePixels"
7新增: Value="true" />
8新增:
9新增: <Setter Property="Background" Value="Transparent"/>
10新增: <!--<Setter Property="Margin" Value="5,0"/>-->
11新增:
12新增: <Setter Property="Template">
13新增: <Setter.Value>
14新增: <ControlTemplate TargetType="{x:Type local:ChartItemTypeColumn}">
15新增: <Border Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
16新增: <Grid>
17新增: <Grid x:Name="Normal">
18新增: <Grid.RowDefinitions>
19新增: <RowDefinition Height="*"/>
20新增: <RowDefinition Height="30"/>
21新增: </Grid.RowDefinitions>
22新增: <Grid x:Name="ValueContainer" >
23新增: <Border Background="Transparent" x:Name="ValueBorder">
24新增: <Rectangle
25新增: x:Name="ValueBlockObj"
26新增: RadiusX="4"
27新增: RadiusY="4"
28新增: Fill="#cccccc"
29新增: Width="{Binding ElementName=ValueContainer,Path=ActualWidth}"
30新增: VerticalAlignment="Bottom"
31新增: HorizontalAlignment="Center"
32新增: />
33新增: </Border>
34新增: </Grid>
35新增: <Grid Grid.Row="1">
36新增: <TextBlock FontSize="12" HorizontalAlignment="Center" Margin="0,10,0,0" Text="{TemplateBinding ColumnName}" Foreground="#FF8A8A8A" />
37新增: </Grid>
38新增:
39新增:
40新增:
41新增: </Grid>
42新增:
43新增: <Grid x:Name="Loading" Visibility="Collapsed">
44新增:
45新增: </Grid>
46新增: </Grid>
47新增: <VisualStateManager.VisualStateGroups>
48新增: <VisualStateGroup x:Name="CommonStates">
49新增: <VisualStateGroup.Transitions>
50新增: <VisualTransition GeneratedDuration="0:0:.2" />
51新增: <VisualTransition GeneratedDuration="0"
52新增: To="Pressed" />
53新增: </VisualStateGroup.Transitions>
54新增: <VisualState x:Name="NormalState" />
55新增: <VisualState x:Name="MouseOver">
56新增: <Storyboard >
57新增: <ColorAnimation Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
58新增: Storyboard.TargetName="ValueBorder" To="#7FF1F1F1" >
59新增: <ColorAnimation.EasingFunction>
60新增: <CubicEase EasingMode="EaseInOut"/>
61新增: </ColorAnimation.EasingFunction>
62新增: </ColorAnimation>
63新增: <!--<ColorAnimation Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)"
64新增: Storyboard.TargetName="IconBorder" To="#2b20d9" >
65新增: <ColorAnimation.EasingFunction>
66新增: <CubicEase EasingMode="EaseInOut"/>
67新增: </ColorAnimation.EasingFunction>
68新增: </ColorAnimation>
69新增: <ColorAnimation Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"
70新增: Storyboard.TargetName="IconBorder" To="#ffffff" >
71新增: <ColorAnimation.EasingFunction>
72新增: <CubicEase EasingMode="EaseInOut"/>
73新增: </ColorAnimation.EasingFunction>
74新增: </ColorAnimation>-->
75新增: </Storyboard>
76新增: </VisualState>
77新增: <VisualState x:Name="Pressed">
78新增:
79新增: </VisualState>
80新增: </VisualStateGroup>
81新增: </VisualStateManager.VisualStateGroups>
82新增: </Border>
83新增:
84新增: <ControlTemplate.Triggers>
85新增: <!--<Trigger Property="IsLoading" Value="True">
86新增: <Setter TargetName="Loading" Property="Visibility" Value="Visible"/>
87新增: <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
88新增: </Trigger>-->
89新增: </ControlTemplate.Triggers>
90新增: </ControlTemplate>
91新增: </Setter.Value>
92新增: </Setter>
93新增: </Style>
94新增:</ResourceDictionary>
文件末尾没有换行
修改UI/Themes/Generic.xaml+3 −0看文件
@@ -11,12 +11,14 @@
1111 <ResourceDictionary Source="/Tai;component/Themes/Base/Img.xaml"/>
1212 <ResourceDictionary Source="/Tai;component/Themes/Base/CheckBox.xaml"/>
1313 <ResourceDictionary Source="/Tai;component/Themes/Base/Text.xaml"/>
14新增: <ResourceDictionary Source="/Tai;component/Themes/Base/View.xaml"/>
1415
1516 <ResourceDictionary Source="/Tai;component/Themes/PageContainer.xaml"/>
1617 <ResourceDictionary Source="/Tai;component/Themes/Charts/Charts.xaml"/>
1718 <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeA.xaml"/>
1819 <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeCard.xaml"/>
1920 <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeMonth.xaml"/>
21新增: <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeColumn.xaml"/>
2022
2123 <ResourceDictionary Source="/Tai;component/Themes/Tabbar/Tabbar.xaml"/>
2224 <ResourceDictionary Source="/Tai;component/Themes/DatePickerBar/DatePickerBar.xaml"/>
@@ -34,6 +36,7 @@
3436 <ResourceDictionary Source="/Tai;component/Themes/Select/Select.xaml"/>
3537 <ResourceDictionary Source="/Tai;component/Themes/Select/Option.xaml"/>
3638 <ResourceDictionary Source="/Tai;component/Themes/Select/ImageSelect.xaml"/>
39新增: <ResourceDictionary Source="/Tai;component/Themes/Select/DateSelect.xaml"/>
3740
3841 </ResourceDictionary.MergedDictionaries>
3942
新增UI/Themes/Select/DateSelect.xaml+184 −0看文件
@@ -0,0 +1,184 @@
1新增:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3新增: xmlns:local="clr-namespace:UI.Controls.Select" xmlns:base="clr-namespace:UI.Controls.Base" xmlns:button="clr-namespace:UI.Controls.Button" xmlns:converter="clr-namespace:UI.Controls.Converters">
4新增: <converter:ToStringConverter x:Key="ToStringConverter"/>
5新增:
6新增: <Style TargetType="{x:Type local:DateSelect}">
7新增: <Setter Property="SnapsToDevicePixels"
8新增: Value="true" />
9新增:
10新增: <Setter Property="Background" Value="Transparent"/>
11新增:
12新增: <Setter Property="Template">
13新增: <Setter.Value>
14新增: <ControlTemplate TargetType="{x:Type local:DateSelect}">
15新增: <Border SnapsToDevicePixels="True" Background="{TemplateBinding Background}" HorizontalAlignment="Left" >
16新增: <Grid>
17新增: <!--当前选择项-->
18新增: <Border x:Name="Main" Margin="0,10,0,0" Background="#f9f9f9" HorizontalAlignment="Left" Padding="15,5" CornerRadius="5">
19新增: <Border.InputBindings>
20新增: <MouseBinding Gesture="LeftClick" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=ShowSelectCommand}"/>
21新增: </Border.InputBindings>
22新增: <Border.Effect>
23新增: <DropShadowEffect Color="#d8d2d2" BlurRadius="1" Direction="300" ShadowDepth="4" Opacity="0.1" RenderingBias="Performance" ></DropShadowEffect>
24新增: </Border.Effect>
25新增: <StackPanel Orientation="Horizontal">
26新增: <base:Icon x:Name="Icon" IconType="DateTime"/>
27新增: <TextBlock Foreground="#1a1a1a" Text="{TemplateBinding DateStr}" VerticalAlignment="Center" Margin="5,0,0,0"/>
28新增: </StackPanel>
29新增: </Border>
30新增:
31新增: <!--选择-->
32新增: <Popup
33新增: x:Name="Popup"
34新增: Placement="Bottom"
35新增: PlacementTarget="{Binding ElementName=Main}"
36新增: IsOpen="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=IsOpen,Mode=TwoWay}" AllowsTransparency="True" >
37新增: <Border
38新增: x:Name="SelectContainer"
39新增: CornerRadius="10"
40新增: BorderBrush="#CCC"
41新增: BorderThickness="1"
42新增: Background="White" Padding="10" MaxHeight="300" Margin="10">
43新增: <Border.Effect>
44新增: <DropShadowEffect BlurRadius="6" ShadowDepth="2" Direction="315" Color="Gray" Opacity=".1"/>
45新增: </Border.Effect>
46新增: <Grid>
47新增: <Grid.RowDefinitions>
48新增: <RowDefinition Height="40"/>
49新增: <RowDefinition Height="auto"/>
50新增: <RowDefinition Height="auto"/>
51新增:
52新增: </Grid.RowDefinitions>
53新增: <!--年份月份选择-->
54新增: <Border>
55新增: <Grid>
56新增: <Grid.ColumnDefinitions>
57新增: <ColumnDefinition Width="*"/>
58新增: <ColumnDefinition Width="*"/>
59新增:
60新增: </Grid.ColumnDefinitions>
61新增: <!--年份选择-->
62新增: <StackPanel Orientation="Horizontal">
63新增: <button:IconButton Icon="Back" FontSize="12" VerticalAlignment="Center" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=SetYearCommand}" CommandParameter="-1"/>
64新增: <TextBlock Width="50" TextAlignment="Center" Margin="5,0" VerticalAlignment="Center" Text="{TemplateBinding Year ,Converter= {StaticResource ToStringConverter}}"/>
65新增: <button:IconButton Icon="Forward" FontSize="12" VerticalAlignment="Center" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=SetYearCommand}" CommandParameter="1"/>
66新增:
67新增: </StackPanel>
68新增: <StackPanel Grid.Column="1" Orientation="Horizontal" x:Name="MonthSelect" Visibility="Collapsed">
69新增: <button:IconButton Icon="Back" FontSize="12" VerticalAlignment="Center" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=SetMonthCommand}" CommandParameter="-1"/>
70新增: <TextBlock Width="30" TextAlignment="Center" Margin="5,0" VerticalAlignment="Center" Text="{TemplateBinding Month ,Converter= {StaticResource ToStringConverter}}"/>
71新增: <button:IconButton Icon="Forward" FontSize="12" VerticalAlignment="Center" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=SetMonthCommand}" CommandParameter="1"/>
72新增:
73新增: </StackPanel>
74新增: </Grid>
75新增:
76新增: </Border>
77新增: <!--日选择-->
78新增: <Border Grid.Row="1" Width="250" x:Name="DaySelect" Visibility="Collapsed">
79新增: <ListView ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=Days}" SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=Day,Mode=TwoWay}" Margin="0,10,0,0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
80新增: <!--<i:Interaction.Triggers>
81新增: <i:EventTrigger EventName="MouseLeftButtonUp">
82新增: <i:InvokeCommandAction Command="{Binding GotoDetailCommand}"
83新增: CommandParameter="{Binding SelectedItem}" />
84新增: </i:EventTrigger>
85新增: </i:Interaction.Triggers>-->
86新增: <ListBox.Resources>
87新增: <Style TargetType="{x:Type ListView}">
88新增: <Setter Property="OverridesDefaultStyle" Value="True"/>
89新增:
90新增: <Setter Property="Template">
91新增: <Setter.Value>
92新增: <ControlTemplate TargetType="{x:Type ListView}">
93新增: <Border>
94新增: <ItemsPresenter />
95新增: </Border>
96新增: </ControlTemplate>
97新增: </Setter.Value>
98新增: </Setter>
99新增: </Style>
100新增: <Style TargetType="{x:Type ListViewItem}">
101新增: <Setter Property="OverridesDefaultStyle" Value="True"/>
102新增: <Setter Property="Foreground" Value="#1a1a1a"/>
103新增:
104新增: <Setter Property="Template">
105新增: <Setter.Value>
106新增: <ControlTemplate TargetType="{x:Type ListViewItem}">
107新增: <Border BorderBrush="Transparent" BorderThickness="2" x:Name="Border" Background="White" Margin="0,0,0,0" Padding="0" Width="35" Height="35" CornerRadius="5">
108新增: <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
109新增: </Border>
110新增: <ControlTemplate.Triggers>
111新增: <Trigger Property="IsMouseOver" Value="True">
112新增: <Setter TargetName="Border" Property="Background" Value="#FFE8E6FF"/>
113新增: <!--<Setter TargetName="Border" Property="BorderBrush" Value="#2b20d9"/>-->
114新增:
115新增: </Trigger>
116新增: <Trigger Property="IsSelected" Value="True">
117新增: <Setter TargetName="Border" Property="Background" Value="#2b20d9"/>
118新增: <Setter Property="Foreground" Value="White"/>
119新增:
120新增: <!--<Setter TargetName="Border" Property="BorderBrush" Value="#2b20d9"/>-->
121新增:
122新增: </Trigger>
123新增: </ControlTemplate.Triggers>
124新增: </ControlTemplate>
125新增: </Setter.Value>
126新增: </Setter>
127新增:
128新增: </Style>
129新增: </ListBox.Resources>
130新增: <ListBox.ItemsPanel>
131新增: <ItemsPanelTemplate>
132新增: <WrapPanel/>
133新增: </ItemsPanelTemplate>
134新增: </ListBox.ItemsPanel>
135新增: <ListView.ItemTemplate>
136新增: <DataTemplate>
137新增:
138新增: <WrapPanel Orientation="Horizontal">
139新增: <Border >
140新增:
141新增: <TextBlock Text="{Binding}" />
142新增:
143新增: </Border>
144新增:
145新增: </WrapPanel>
146新增: </DataTemplate>
147新增: </ListView.ItemTemplate>
148新增: </ListView>
149新增: </Border>
150新增: <Border Grid.Row="2" HorizontalAlignment="Right">
151新增: <StackPanel Orientation="Horizontal">
152新增: <button:Button Content="确认" Width="100" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:DateSelect}}, Path=DoneCommand}"/>
153新增: </StackPanel>
154新增: </Border>
155新增: </Grid>
156新增:
157新增: </Border>
158新增: </Popup>
159新增: </Grid>
160新增: </Border>
161新增: <ControlTemplate.Triggers>
162新增: <Trigger Property="SelectType" Value="Day">
163新增: <Setter Property="Visibility" TargetName="DaySelect" Value="Visible"/>
164新增: <Setter Property="Visibility" TargetName="MonthSelect" Value="Visible"/>
165新增: </Trigger>
166新增: <Trigger Property="SelectType" Value="Month">
167新增: <Setter Property="Visibility" TargetName="DaySelect" Value="Collapsed"/>
168新增: <Setter Property="Visibility" TargetName="MonthSelect" Value="Visible"/>
169新增:
170新增: </Trigger>
171新增: <Trigger Property="SelectType" Value="Year">
172新增: <Setter Property="Visibility" TargetName="DaySelect" Value="Collapsed"/>
173新增: <Setter Property="Visibility" TargetName="MonthSelect" Value="Collapsed"/>
174新增: </Trigger>
175新增: <Trigger Property="IsMouseOver" Value="True">
176新增: <Setter Property="Background" TargetName="Main" Value="#FFE8E6FF"/>
177新增: <Setter TargetName="Icon" Property="Foreground" Value="#2b20d9"/>
178新增: </Trigger>
179新增: </ControlTemplate.Triggers>
180新增: </ControlTemplate>
181新增: </Setter.Value>
182新增: </Setter>
183新增: </Style>
184新增:</ResourceDictionary>
文件末尾没有换行
修改UI/Themes/Select/Option.xaml+5 −2看文件
@@ -18,7 +18,7 @@
1818 <Grid.ColumnDefinitions>
1919 <ColumnDefinition Width="30"/>
2020
21删除: <ColumnDefinition Width="40"/>
21新增: <ColumnDefinition Width="auto"/>
2222 <ColumnDefinition Width="*"/>
2323
2424 </Grid.ColumnDefinitions>
@@ -50,7 +50,7 @@
5050 </Grid>
5151 </Border>
5252 <!--图标-->
53删除: <Border Grid.Column="1" Margin="5,0,0,0">
53新增: <Border Grid.Column="1" Margin="5,0,0,0" x:Name="Img">
5454 <base:Img URL="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Option}}, Path=Value.Img}" Width="25" Height="25" VerticalAlignment="Center"/>
5555 </Border>
5656 <!--文字-->
@@ -65,6 +65,9 @@
6565
6666 </Border>
6767 <ControlTemplate.Triggers>
68新增: <Trigger Property="IsShowIcon" Value="False">
69新增: <Setter Property="Visibility" TargetName="Img" Value="Collapsed"/>
70新增: </Trigger>
6871 <Trigger Property="IsChecked" Value="True">
6972 <Setter TargetName="CheckStyle" Property="Visibility" Value="Visible"/>
7073 <Setter TargetName="UnCheckStyle" Property="Visibility" Value="Collapsed"/>
修改UI/Themes/Select/Select.xaml+17 −4看文件
@@ -1,6 +1,6 @@
11<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3删除: xmlns:local="clr-namespace:UI.Controls.Select" xmlns:base="clr-namespace:UI.Controls.Base">
3新增: xmlns:local="clr-namespace:UI.Controls.Select" xmlns:base="clr-namespace:UI.Controls.Base" xmlns:sys="clr-namespace:System;assembly=mscorlib">
44
55
66 <Style TargetType="{x:Type local:Select}">
@@ -12,15 +12,16 @@
1212 <Setter Property="Template">
1313 <Setter.Value>
1414 <ControlTemplate TargetType="{x:Type local:Select}">
15删除: <Border Background="{TemplateBinding Background}" HorizontalAlignment="Left" >
15新增: <Border Background="{TemplateBinding Background}" HorizontalAlignment="Left" SnapsToDevicePixels="True">
1616 <Grid>
1717 <!--当前选择项-->
18删除: <Border x:Name="Main" Margin="0,10,0,0" Background="#f9f9f9" HorizontalAlignment="Left" Padding="15,5" CornerRadius="5">
18新增: <Border x:Name="Main" Background="#f9f9f9" HorizontalAlignment="Left" Padding="15,5" CornerRadius="5">
1919 <Border.Effect>
2020 <DropShadowEffect Color="#d8d2d2" BlurRadius="1" Direction="300" ShadowDepth="4" Opacity="0.1" RenderingBias="Performance" ></DropShadowEffect>
2121 </Border.Effect>
2222 <StackPanel Orientation="Horizontal">
23删除: <base:Img URL="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Select}}, Path=SelectedItem.Img}" Width="30" Height="30" VerticalAlignment="Center"/>
23新增: <!--<TextBlock x:Name="PlaceholderText" Text="请选择" Visibility="Collapsed"/>-->
24新增: <base:Img x:Name="Img" URL="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Select}}, Path=SelectedItem.Img}" Width="25" Height="25" VerticalAlignment="Center"/>
2425 <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Select}}, Path=SelectedItem.Name}" VerticalAlignment="Center" Margin="5,0,0,0"/>
2526 </StackPanel>
2627 </Border>
@@ -52,6 +53,18 @@
5253 <Trigger Property="IsMouseOver" Value="True">
5354 <Setter Property="Background" TargetName="Main" Value="#FFE8E6FF"/>
5455 </Trigger>
56新增: <Trigger Property="IsShowIcon" Value="False">
57新增: <Setter Property="Visibility" TargetName="Img" Value="Collapsed"/>
58新增: </Trigger>
59新增: <!--<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Select}}, Path=SelectedItem.Img}" Value="{x:Static sys:String.Empty}">
60新增: <Setter Property="Visibility" TargetName="Img" Value="Collapsed"/>
61新增:
62新增: </DataTrigger>
63新增: <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:Select}}, Path=SelectedItem.Name}" Value="">
64新增: <Setter Property="Visibility" TargetName="Img" Value="Collapsed"/>
65新增: <Setter Property="Visibility" TargetName="PlaceholderText" Value="Visible"/>
66新增:
67新增: </DataTrigger>-->
5568 </ControlTemplate.Triggers>
5669 </ControlTemplate>
5770 </Setter.Value>
新增UI/ViewModels/ChartPageVM.cs+319 −0看文件
@@ -0,0 +1,319 @@
1新增:using Core.Librarys;
2新增:using Core.Models;
3新增:using Core.Servicers.Interfaces;
4新增:using System;
5新增:using System.Collections.Generic;
6新增:using System.Linq;
7新增:using System.Text;
8新增:using System.Threading.Tasks;
9新增:using UI.Controls;
10新增:using UI.Controls.Charts.Model;
11新增:using UI.Controls.Select;
12新增:using UI.Librays;
13新增:using UI.Models;
14新增:using UI.Views;
15新增:
16新增:namespace UI.ViewModels
17新增:{
18新增: public class ChartPageVM : ChartPageModel
19新增: {
20新增: private readonly ICategorys categorys;
21新增: private readonly IData data;
22新增: private readonly MainViewModel mainVM;
23新增: public Command ToDetailCommand { get; set; }
24新增:
25新增: public ChartPageVM(IData data, ICategorys categorys, MainViewModel mainVM)
26新增: {
27新增: this.data = data;
28新增: this.categorys = categorys;
29新增: this.mainVM = mainVM;
30新增:
31新增:
32新增: ToDetailCommand = new Command(new Action<object>(OnTodetailCommand));
33新增:
34新增: TabbarData = new System.Collections.ObjectModel.ObservableCollection<string>()
35新增: {
36新增: "按天","按周","按月","按年"
37新增: };
38新增:
39新增: var weekOptions = new List<SelectItemModel>();
40新增: weekOptions.Add(new SelectItemModel()
41新增: {
42新增: Name = "本周"
43新增: });
44新增: weekOptions.Add(new SelectItemModel()
45新增: {
46新增: Name = "上周"
47新增: });
48新增:
49新增: WeekOptions = weekOptions;
50新增:
51新增: SelectedWeek = weekOptions[0];
52新增:
53新增: MonthDate = DateTime.Now;
54新增:
55新增: TabbarSelectedIndex = 0;
56新增:
57新增: Date = DateTime.Now;
58新增:
59新增: YearDate = DateTime.Now;
60新增:
61新增: LoadDayData();
62新增:
63新增: PropertyChanged += ChartPageVM_PropertyChanged;
64新增: }
65新增:
66新增: private void OnTodetailCommand(object obj)
67新增: {
68新增: var data = obj as ChartsDataModel;
69新增:
70新增: if (data != null)
71新增: {
72新增: var model = data.Data as DailyLogModel;
73新增: if (model != null && model.AppModel != null)
74新增: {
75新增: mainVM.Data = model.AppModel;
76新增: mainVM.Uri = nameof(DetailPage);
77新增: }
78新增:
79新增: }
80新增: }
81新增:
82新增: private void ChartPageVM_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
83新增: {
84新增: if (e.PropertyName == nameof(Date))
85新增: {
86新增: LoadDayData();
87新增: }
88新增: if (e.PropertyName == nameof(TabbarSelectedIndex))
89新增: {
90新增: if (TabbarSelectedIndex == 0)
91新增: {
92新增: NameIndexStart = 0;
93新增:
94新增: LoadDayData();
95新增: }
96新增: else if (TabbarSelectedIndex == 1)
97新增: {
98新增: LoadWeekData();
99新增: }
100新增: else if (TabbarSelectedIndex == 2)
101新增: {
102新增: NameIndexStart = 1;
103新增:
104新增: LoadMonthlyData();
105新增: }
106新增: else if (TabbarSelectedIndex == 3)
107新增: {
108新增: LoadYearData();
109新增: }
110新增:
111新增: }
112新增: if (e.PropertyName == nameof(SelectedWeek))
113新增: {
114新增: LoadWeekData();
115新增: }
116新增: if (e.PropertyName == nameof(MonthDate))
117新增: {
118新增: LoadMonthlyData();
119新增: }
120新增: if (e.PropertyName == nameof(YearDate))
121新增: {
122新增: LoadYearData();
123新增: }
124新增: }
125新增:
126新增: /// <summary>
127新增: /// 加载天数据
128新增: /// </summary>
129新增: private void LoadDayData()
130新增: {
131新增: Task.Run(() =>
132新增: {
133新增: var list = data.GetCategoryHoursData(Date);
134新增:
135新增: var chartData = new List<ChartsDataModel>();
136新增:
137新增: foreach (var item in list)
138新增: {
139新增: var category = categorys.GetCategory(item.CategoryID);
140新增:
141新增: chartData.Add(new ChartsDataModel()
142新增: {
143新增:
144新增: Name = category.Name,
145新增: Icon = category.IconFile,
146新增: Values = item.Values,
147新增: });
148新增: }
149新增:
150新增: Data = chartData;
151新增:
152新增: LoadTopData();
153新增: });
154新增: }
155新增:
156新增: /// <summary>
157新增: /// 加载周数据
158新增: /// </summary>
159新增: private void LoadWeekData()
160新增: {
161新增: Task.Run(() =>
162新增: {
163新增: var weekDateArr = SelectedWeek.Name == "本周" ? Time.GetThisWeekDate() : Time.GetLastWeekDate();
164新增:
165新增: WeekDateStr = weekDateArr[0].ToString("yyyy年MM月dd日") + " 到 " + weekDateArr[1].ToString("yyyy年MM月dd日");
166新增:
167新增: var list = data.GetCategoryRangeData(weekDateArr[0], weekDateArr[1]);
168新增:
169新增: var chartData = new List<ChartsDataModel>();
170新增:
171新增: string[] weekNames = { "周一", "周二", "周三", "周四", "周五", "周六", "周日", };
172新增: foreach (var item in list)
173新增: {
174新增: var category = categorys.GetCategory(item.CategoryID);
175新增:
176新增: chartData.Add(new ChartsDataModel()
177新增: {
178新增:
179新增: Name = category.Name,
180新增: Icon = category.IconFile,
181新增: Values = item.Values,
182新增: ColumnNames = weekNames
183新增: });
184新增: }
185新增:
186新增: Data = chartData;
187新增: });
188新增:
189新增:
190新增: LoadTopData();
191新增:
192新增: }
193新增:
194新增: /// <summary>
195新增: /// 加载月数据
196新增: /// </summary>
197新增: private void LoadMonthlyData()
198新增: {
199新增: Task.Run(() =>
200新增: {
201新增: var dateArr = Time.GetMonthDate(MonthDate);
202新增:
203新增: var list = data.GetCategoryRangeData(dateArr[0], dateArr[1]);
204新增:
205新增: var chartData = new List<ChartsDataModel>();
206新增:
207新增: foreach (var item in list)
208新增: {
209新增: var category = categorys.GetCategory(item.CategoryID);
210新增:
211新增: chartData.Add(new ChartsDataModel()
212新增: {
213新增:
214新增: Name = category.Name,
215新增: Icon = category.IconFile,
216新增: Values = item.Values,
217新增: });
218新增: }
219新增:
220新增: Data = chartData;
221新增:
222新增: LoadTopData();
223新增: });
224新增:
225新增: }
226新增:
227新增: /// <summary>
228新增: /// 加载年份数据
229新增: /// </summary>
230新增: private void LoadYearData()
231新增: {
232新增: Task.Run(() =>
233新增: {
234新增: var list = data.GetCategoryYearData(YearDate);
235新增:
236新增: var chartData = new List<ChartsDataModel>();
237新增:
238新增: string[] names = new string[12];
239新增: for (int i = 0; i < 12; i++)
240新增: {
241新增: names[i] = (i + 1) + "月";
242新增: }
243新增:
244新增: foreach (var item in list)
245新增: {
246新增: var category = categorys.GetCategory(item.CategoryID);
247新增:
248新增: chartData.Add(new ChartsDataModel()
249新增: {
250新增:
251新增: Name = category.Name,
252新增: Icon = category.IconFile,
253新增: Values = item.Values,
254新增: ColumnNames = names
255新增: });
256新增: }
257新增:
258新增: Data = chartData;
259新增:
260新增: LoadTopData();
261新增: });
262新增: }
263新增:
264新增: private void LoadTopData()
265新增: {
266新增: Task.Run(() =>
267新增: {
268新增: var dateStart = Date.Date;
269新增: var dateEnd = Date.Date;
270新增: if (TabbarSelectedIndex == 1)
271新增: {
272新增: // 周
273新增: var weekDateArr = SelectedWeek.Name == "本周" ? Time.GetThisWeekDate() : Time.GetLastWeekDate();
274新增:
275新增: dateStart = weekDateArr[0];
276新增: dateEnd = weekDateArr[1];
277新增:
278新增: }
279新增: else if (TabbarSelectedIndex == 2)
280新增: {
281新增: // 月
282新增: var dateArr = Time.GetMonthDate(MonthDate);
283新增: dateStart = dateArr[0];
284新增: dateEnd = dateArr[1];
285新增: }
286新增: else if (TabbarSelectedIndex == 3)
287新增: {
288新增: // 年
289新增: var dateArr = Time.GetYearDate(YearDate);
290新增: dateStart = dateArr[0];
291新增: dateEnd = dateArr[1];
292新增: }
293新增: var list = data.GetDateRangelogList(dateStart, dateEnd, 3);
294新增:
295新增: TopData = MapToChartsData(list);
296新增: });
297新增: }
298新增:
299新增: private List<ChartsDataModel> MapToChartsData(IEnumerable<Core.Models.DailyLogModel> list)
300新增: {
301新增: var resData = new List<ChartsDataModel>();
302新增:
303新增: foreach (var item in list)
304新增: {
305新增:
306新增: var bindModel = new ChartsDataModel();
307新增: bindModel.Data = item;
308新增: bindModel.Name = item.AppModel?.Name;
309新增: bindModel.Value = item.Time;
310新增: bindModel.Tag = Timer.Fromat(item.Time);
311新增: bindModel.PopupText = item.AppModel?.File;
312新增: bindModel.Icon = item.AppModel?.IconFile;
313新增: resData.Add(bindModel);
314新增: }
315新增:
316新增: return resData;
317新增: }
318新增: }
319新增:}
修改UI/ViewModels/MainViewModel.cs+2 −1看文件
@@ -74,6 +74,7 @@ namespace UI.ViewModels
7474 IndexUriList.Add(nameof(IndexPage));
7575 IndexUriList.Add(nameof(DataPage));
7676 IndexUriList.Add(nameof(CategoryPage));
77新增: IndexUriList.Add(nameof(ChartPage));
7778
7879
7980 Items.Add(new Controls.Navigation.Models.NavigationItemModel()
@@ -89,7 +90,7 @@ namespace UI.ViewModels
8990 Icon = Controls.Base.IconTypes.BIDashboard,
9091 Title = "统计",
9192 ID = 1,
92删除: Uri = nameof(DataPage),
93新增: Uri = nameof(ChartPage),
9394
9495 });
9596 Items.Add(new Controls.Navigation.Models.NavigationItemModel()
新增UI/Views/ChartPage.xaml+51 −0看文件
@@ -0,0 +1,51 @@
1新增:<Page x:Class="UI.Views.ChartPage"
2新增: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3新增: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4新增: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5新增: xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6新增: xmlns:local="clr-namespace:UI.Views" xmlns:charts="clr-namespace:UI.Controls.Charts" xmlns:Tabbar="clr-namespace:UI.Controls.Tabbar" xmlns:select="clr-namespace:UI.Controls.Select" xmlns:base="clr-namespace:UI.Controls.Base" xmlns:DatePickerBar="clr-namespace:UI.Controls.DatePickerBar"
7新增: mc:Ignorable="d"
8新增: d:DesignHeight="450" d:DesignWidth="800"
9新增: Title="ChartPage">
10新增:
11新增: <Grid>
12新增: <StackPanel Margin="20">
13新增: <TextBlock Text="统计" FontSize="18" Margin="0,5,0,20"/>
14新增: <Tabbar:Tabbar Data="{Binding TabbarData}" SelectedIndex="{Binding TabbarSelectedIndex,Mode=TwoWay}"/>
15新增: <Border>
16新增: <Grid>
17新增: <!--按天-->
18新增: <base:View Condition="0" Value="{Binding TabbarSelectedIndex}">
19新增: <select:DateSelect Date="{Binding Date,Mode=TwoWay}"/>
20新增: </base:View>
21新增:
22新增: <!--按周-->
23新增: <base:View Condition="1" Value="{Binding TabbarSelectedIndex}">
24新增: <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
25新增: <select:Select IsShowIcon="False" SelectedItem="{Binding SelectedWeek,Mode=TwoWay}" Options="{Binding WeekOptions}"/>
26新增: <TextBlock Foreground="#626262" Margin="20,0,0,0" FontSize="14" Text="{Binding WeekDateStr}" VerticalAlignment="Center"/>
27新增: </StackPanel>
28新增: </base:View>
29新增: <!--按月-->
30新增: <base:View Condition="2" Value="{Binding TabbarSelectedIndex}">
31新增: <select:DateSelect Date="{Binding MonthDate,Mode=TwoWay}" SelectType="Month"/>
32新增:
33新增: </base:View>
34新增: <!--按年-->
35新增: <base:View Condition="3" Value="{Binding TabbarSelectedIndex}">
36新增: <select:DateSelect Date="{Binding YearDate,Mode=TwoWay}" SelectType="Year"/>
37新增:
38新增: </base:View>
39新增: </Grid>
40新增: </Border>
41新增: <Border Margin="0,20,0,0" Height="330" Width="680" HorizontalAlignment="Left" Background="White" Padding="20" CornerRadius="10">
42新增: <charts:Charts NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}"/>
43新增:
44新增: </Border>
45新增: <TextBlock Text="最为频繁" FontSize="15" Margin="0,20,0,5"/>
46新增: <Border Margin="0,10,0,0" Width="680" HorizontalAlignment="Left" Background="White" Padding="20" CornerRadius="10">
47新增: <charts:Charts IsCanScroll="False" Height="180" Data="{Binding TopData}" ChartsType="HorizontalA" ShowLimit="3" ClickCommand="{Binding ToDetailCommand}"/>
48新增: </Border>
49新增: </StackPanel>
50新增: </Grid>
51新增:</Page>
新增UI/Views/ChartPage.xaml.cs+49 −0看文件
@@ -0,0 +1,49 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Linq;
4新增:using System.Text;
5新增:using System.Threading.Tasks;
6新增:using System.Windows;
7新增:using System.Windows.Controls;
8新增:using System.Windows.Data;
9新增:using System.Windows.Documents;
10新增:using System.Windows.Input;
11新增:using System.Windows.Media;
12新增:using System.Windows.Media.Imaging;
13新增:using System.Windows.Navigation;
14新增:using System.Windows.Shapes;
15新增:using UI.Controls.Charts.Model;
16新增:using UI.ViewModels;
17新增:
18新增:namespace UI.Views
19新增:{
20新增: /// <summary>
21新增: /// ChartPage.xaml 的交互逻辑
22新增: /// </summary>
23新增: public partial class ChartPage : Page
24新增: {
25新增: public ChartPage(ChartPageVM vm)
26新增: {
27新增: InitializeComponent();
28新增: DataContext = vm;
29新增:
30新增: //var data = new List<ChartsDataModel>();
31新增: //data.Add(new ChartsDataModel()
32新增: //{
33新增: // Name="分布",
34新增: // //Color= "#2f69fe",
35新增: // Values = new double[] { 10, 20, 30, 40,30,403,30,50,43,43,23,65,87,43,23,23 }
36新增: //});
37新增: //data.Add(new ChartsDataModel()
38新增: //{
39新增: // Name = "测试",
40新增:
41新增: // //Color = "#da4d07",
42新增: // Values = new double[] { 110, 30, 10, 20, 330, 203, 3, 500, 53, 93, 23, 65, 87, 43, 23, 23 }
43新增: //});
44新增:
45新增:
46新增: //test.Data = data;
47新增: }
48新增: }
49新增:}
修改UI/Views/DetailPage.xaml+1 −1看文件
@@ -69,7 +69,7 @@
6969 <TextBlock Text="{Binding Process.Data.AppModel.Category.Name}" VerticalAlignment="Center" Margin="5,0,0,0"/>
7070 </StackPanel>
7171 </Border>-->
72删除: <Select:Select ToolTip="分类" SelectedItem="{Binding Category,Mode=TwoWay}" Options="{Binding Categorys}"/>
72新增: <Select:Select Margin="0,10,0,0" ToolTip="分类" SelectedItem="{Binding Category,Mode=TwoWay}" Options="{Binding Categorys}"/>
7373
7474 </StackPanel>
7575