跳到主要内容

github/tai

公开

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

提交记录
修改UI/Controls/Charts/Charts.cs+62 −0看文件
@@ -294,7 +294,23 @@ namespace UI.Controls.Charts
294294
295295
296296 #endregion
297新增: #region 是否显示总计值(仅柱状图有效,默认显示)
298新增: /// <summary>
299新增: /// 是否显示总计值(仅柱状图有效,默认显示)
300新增: /// </summary>
301新增: public bool IsShowTotal
302新增: {
303新增: get { return (bool)GetValue(IsShowTotalProperty); }
304新增: set { SetValue(IsShowTotalProperty, value); }
305新增: }
306新增: public static readonly DependencyProperty IsShowTotalProperty =
307新增: DependencyProperty.Register("IsShowTotal",
308新增: typeof(bool),
309新增: typeof(Charts),
310新增: new PropertyMetadata(true));
311新增:
297312
313新增: #endregion
298314 public bool IsShowValuesPopup
299315 {
300316 get { return (bool)GetValue(IsShowValuesPopupProperty); }
@@ -398,6 +414,7 @@ namespace UI.Controls.Charts
398414 private Grid MonthContainer;
399415 private ScrollViewer ScrollViewer;
400416 private Grid ColumnContainer;
417新增: private Border RadarContainer;
401418 /// <summary>
402419 /// 是否在渲染中
403420 /// </summary>
@@ -448,6 +465,7 @@ namespace UI.Controls.Charts
448465 ScrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
449466 NoScrollContainer = GetTemplateChild("NoScrollContainer") as StackPanel;
450467 ColumnContainer = GetTemplateChild("ColumnContainer") as Grid;
468新增: RadarContainer = GetTemplateChild("Radar") as Border;
451469
452470 if (IsLoading)
453471 {
@@ -540,12 +558,15 @@ namespace UI.Controls.Charts
540558 MonthContainer.Children.Clear();
541559 NoScrollContainer.Children.Clear();
542560 ColumnContainer.Children.Clear();
561新增: RadarContainer.Child = null;
543562
544563 if (Data == null || Data.Count() <= 0)
545564 {
546565 Container.Children.Add(new EmptyData());
547566 NoScrollContainer.Children.Add(new EmptyData());
548567 CardContainer.Children.Add(new EmptyData());
568新增: RadarContainer.Child = new EmptyData();
569新增:
549570 IsEmpty = true;
550571 return;
551572 }
@@ -569,6 +590,9 @@ namespace UI.Controls.Charts
569590 case ChartsType.Column:
570591 RenderColumnStyle();
571592 break;
593新增: case ChartsType.Radar:
594新增: RenderLadarStyle();
595新增: break;
572596 }
573597
574598 }
@@ -996,6 +1020,44 @@ namespace UI.Controls.Charts
9961020 }
9971021 #endregion
9981022
1023新增: #region 渲染雷达图
1024新增: private void RenderLadarStyle()
1025新增: {
1026新增: if (Data.Count() <= 2)
1027新增: {
1028新增: RadarContainer.Child = new EmptyData();
1029新增: return;
1030新增: }
1031新增: // 最大值
1032新增: double total = 0;
1033新增: // 查找最大值
1034新增: foreach (var item in Data)
1035新增: {
1036新增: // 查找最大值
1037新增: double max = item.Values.Sum();
1038新增: if (max > maxValue)
1039新增: {
1040新增: maxValue = max;
1041新增: }
1042新增:
1043新增: total += item.Values.Sum();
1044新增:
1045新增: }
1046新增: //maxValue = total;
1047新增:
1048新增: if (DataMaximum > 0)
1049新增: {
1050新增: maxValue = DataMaximum;
1051新增: }
1052新增: var radar = new ChartsItemTypeRadar();
1053新增: radar.Data = Data.OrderBy(m => m.Values.Sum()).ToList();
1054新增: radar.MaxValue = maxValue;
1055新增: RadarContainer.Child = radar;
1056新增:
1057新增: isRendering = false;
1058新增: }
1059新增: #endregion
1060新增:
9991061 private string Covervalue(double value)
10001062 {
10011063 if (DataValueType == ChartDataValueType.Seconds)
新增UI/Controls/Charts/ChartsItemTypeRadar.cs+323 −0看文件
@@ -0,0 +1,323 @@
1新增:using Core.Librarys;
2新增:using Core.Librarys.Image;
3新增:using System;
4新增:using System.Collections.Generic;
5新增:using System.Diagnostics;
6新增:using System.Globalization;
7新增:using System.IO;
8新增:using System.Linq;
9新增:using System.Text;
10新增:using System.Threading.Tasks;
11新增:using System.Windows;
12新增:using System.Windows.Controls;
13新增:using System.Windows.Data;
14新增:using System.Windows.Documents;
15新增:using System.Windows.Input;
16新增:using System.Windows.Media;
17新增:using System.Windows.Media.Imaging;
18新增:using System.Windows.Navigation;
19新增:using System.Windows.Shapes;
20新增:using UI.Controls.Charts.Model;
21新增:using UI.Librays;
22新增:
23新增:namespace UI.Controls.Charts
24新增:{
25新增: public class ChartsItemTypeRadar : Control
26新增: {
27新增: #region Data
28新增: /// <summary>
29新增: /// Data
30新增: /// </summary>
31新增: public List<ChartsDataModel> Data
32新增: {
33新增: get { return (List<ChartsDataModel>)GetValue(DataProperty); }
34新增: set { SetValue(DataProperty, value); }
35新增: }
36新增: public static readonly DependencyProperty DataProperty =
37新增: DependencyProperty.Register("Data",
38新增: typeof(List<ChartsDataModel>),
39新增: typeof(ChartsItemTypeRadar));
40新增:
41新增:
42新增: #endregion
43新增:
44新增: #region MaxValue 最大值
45新增: /// <summary>
46新增: /// 样式类型
47新增: /// </summary>
48新增: public double MaxValue
49新增: {
50新增: get { return (double)GetValue(MaxValueProperty); }
51新增: set { SetValue(MaxValueProperty, value); }
52新增: }
53新增: public static readonly DependencyProperty MaxValueProperty =
54新增: DependencyProperty.Register("MaxValue",
55新增: typeof(double),
56新增: typeof(ChartsItemTypeRadar));
57新增:
58新增:
59新增: #endregion
60新增:
61新增: #region IsLoading 是否正在加载中
62新增: /// <summary>
63新增: /// 是否正在加载中
64新增: /// </summary>
65新增: public bool IsLoading
66新增: {
67新增: get { return (bool)GetValue(IsLoadingProperty); }
68新增: set { SetValue(IsLoadingProperty, value); }
69新增: }
70新增: public static readonly DependencyProperty IsLoadingProperty =
71新增: DependencyProperty.Register("IsLoading",
72新增: typeof(bool),
73新增: typeof(ChartsItemTypeRadar));
74新增:
75新增:
76新增: #endregion
77新增:
78新增: public Geometry RadarPathData
79新增: {
80新增: get { return (Geometry)GetValue(RadarPathDataProperty); }
81新增: set { SetValue(RadarPathDataProperty, value); }
82新增: }
83新增: public static readonly DependencyProperty RadarPathDataProperty =
84新增: DependencyProperty.Register("RadarPathData",
85新增: typeof(Geometry),
86新增: typeof(ChartsItemTypeRadar));
87新增:
88新增: private Canvas canvas;
89新增: public ChartsItemTypeRadar()
90新增: {
91新增: DefaultStyleKey = typeof(ChartsItemTypeRadar);
92新增: }
93新增:
94新增:
95新增: public override void OnApplyTemplate()
96新增: {
97新增: base.OnApplyTemplate();
98新增: canvas = GetTemplateChild("Canvas") as Canvas;
99新增: Loaded += ChartsItemTypeRadar_Loaded;
100新增: }
101新增:
102新增: private void ChartsItemTypeRadar_Loaded(object sender, RoutedEventArgs e)
103新增: {
104新增: Render();
105新增: }
106新增:
107新增: private void Render()
108新增: {
109新增: if (Data == null || Data.Count == 0)
110新增: {
111新增: return;
112新增: }
113新增: double size = ActualWidth != double.NaN ? ActualWidth : 200;
114新增: //size -= 50;
115新增: int count = Data.Count;
116新增:
117新增: // 边长
118新增: double lineWidth = size / 2;
119新增:
120新增: // 角度
121新增: double angle = (Math.PI * 2) / count;
122新增:
123新增: var r = lineWidth / count;
124新增:
125新增: // 多边形边框
126新增: for (int i = 0; i < 3; i++)
127新增: {
128新增: var points = new List<Point>();
129新增: // 当前半径
130新增: var currR = (r - (5 * i)) * (count - i);
131新增:
132新增: for (int j = 0; j < count; j++)
133新增: {
134新增: points.Add(new Point(lineWidth + currR * Math.Cos(angle * j), lineWidth + currR * Math.Sin(angle * j)));
135新增: }
136新增: // 画出边框
137新增: for (int i2 = 0; i2 < points.Count; i2++)
138新增: {
139新增: var line = new Line();
140新增: line.X1 = points[i2].X;
141新增: line.Y1 = points[i2].Y;
142新增:
143新增: line.X2 = i2 == points.Count - 1 ? points[0].X : points[i2 + 1].X;
144新增: line.Y2 = i2 == points.Count - 1 ? points[0].Y : points[i2 + 1].Y;
145新增:
146新增: line.StrokeThickness = i == 0 ? 1 : 1;
147新增:
148新增: line.Stroke = UI.Base.Color.Colors.GetFromString(i == 0 ? "#eeeef2" : "#eeeef2");
149新增:
150新增: canvas.Children.Add(line);
151新增:
152新增: }
153新增: }
154新增:
155新增: // 顶点连线
156新增: for (var i = 0; i < count; i++)
157新增: {
158新增: //double diff = i == 0 || i == count - 1 ? 0 : 5;
159新增: double diff = 0;
160新增: var x = (double)(lineWidth + (lineWidth - diff) * Math.Cos((angle) * i));
161新增: var y = (double)(lineWidth + (lineWidth - diff) * Math.Sin((angle) * i));
162新增:
163新增: var line = new Line();
164新增: line.X1 = lineWidth;
165新增: line.Y1 = lineWidth;
166新增:
167新增: line.X2 = x;
168新增: line.Y2 = y;
169新增:
170新增: line.StrokeThickness = .5;
171新增: line.Stroke = UI.Base.Color.Colors.GetFromString("#dedede");
172新增:
173新增: canvas.Children.Add(line);
174新增:
175新增: // 类别文字
176新增: var font = new TextBlock();
177新增: font.Text = Data[i].Name.Length > 4 ? Data[i].Name.Substring(0, 4) : Data[i].Name;
178新增: font.Foreground = UI.Base.Color.Colors.GetFromString("#7f7f7f");
179新增: font.FontSize = 12;
180新增: font.ToolTip = $"{Data[i].Name} {Time.ToString((int)Data[i].Values.Sum())}";
181新增:
182新增: var textSize = MeasureString(font);
183新增: Debug.WriteLine(font.Text + " -> " + angle * i);
184新增: if (angle * i > 0 && angle * i <= Math.PI / 2)
185新增: {
186新增: // >0 && < 1.57
187新增: x += textSize.Height / 2;
188新增: y += textSize.Height / 2;
189新增: }
190新增: else if (angle * i > 1.79 && angle * i < 1.8)
191新增: {
192新增: x += textSize.Height / 2;
193新增: y += textSize.Width / 2;
194新增: }
195新增: else if (angle * i > 2.09 && angle * i < 2.1)
196新增: {
197新增: x += textSize.Height / 2;
198新增: y += textSize.Height / 2;
199新增: }
200新增: else if (angle * i > 2.51 && angle * i < 2.52)
201新增: {
202新增: x += textSize.Height / 2;
203新增: y += textSize.Height / 2;
204新增: }
205新增: else if (angle * i > 2.69 && angle * i < 2.7)
206新增: {
207新增: x += textSize.Height / 2;
208新增: y += textSize.Height / 2;
209新增: }
210新增: else if (angle * i > Math.PI / 2 && angle * i <= Math.PI)
211新增: {
212新增: // > 1.57 && < 3.14
213新增: x -= textSize.Height / 2;
214新增: y -= textSize.Width / 2;
215新增:
216新增: }
217新增: //else if (angle * i > 3.5 && angle * i < 4.2)
218新增: //{
219新增: // x -= textSize.Height / 2;
220新增: // y -= textSize.Width / 2;
221新增:
222新增: //}
223新增: else if (angle * i > Math.PI && angle * i <= Math.PI * 3 / 2)
224新增: {
225新增: // > 3.14 && < 4.71
226新增: x += font.FontSize / 2;
227新增: y -= textSize.Width + textSize.Height / 2;
228新增: }
229新增: else if (angle * i > Math.PI * 3 / 2)
230新增: {
231新增: // > 4.71
232新增: x += textSize.Height / 2;
233新增: y -= textSize.Width + textSize.Height / 2;
234新增: }
235新增: else
236新增: {
237新增: // 顶点
238新增: x += textSize.Height + textSize.Height / 2;
239新增: y -= textSize.Width / 2;
240新增: }
241新增:
242新增: font.RenderTransform = new RotateTransform()
243新增: {
244新增: Angle = 90
245新增: };
246新增: Canvas.SetLeft(font, x);
247新增: Canvas.SetTop(font, y);
248新增: canvas.Children.Add(font);
249新增: }
250新增:
251新增: // 中心装饰点
252新增: var centerPoint = new Ellipse();
253新增: centerPoint.Width = 15;
254新增: centerPoint.Height = 15;
255新增: centerPoint.Fill = UI.Base.Color.Colors.GetFromString("#ffffff");
256新增: centerPoint.Stroke = UI.Base.Color.Colors.GetFromString("#dedede");
257新增: centerPoint.StrokeThickness = 1;
258新增: Canvas.SetLeft(centerPoint, lineWidth - centerPoint.Width / 2);
259新增: Canvas.SetTop(centerPoint, lineWidth - centerPoint.Width / 2);
260新增: canvas.Children.Add(centerPoint);
261新增:
262新增: // 数据区域
263新增: var pc = new PointCollection();
264新增:
265新增: for (int i = 0; i < count; i++)
266新增: {
267新增: double sum = Data[i].Values.Sum();
268新增: double value = sum / MaxValue;
269新增: value = value == 1 ? 0.97 : value;
270新增:
271新增: var x = (double)(lineWidth + (lineWidth) * Math.Cos((angle) * i) * value);
272新增: var y = (double)(lineWidth + (lineWidth) * Math.Sin((angle) * i) * value);
273新增:
274新增: pc.Add(new Point(x, y));
275新增:
276新增: // 数据点
277新增: var dataPoint = new Ellipse();
278新增: dataPoint.Width = 5;
279新增: dataPoint.Height = 5;
280新增: dataPoint.Fill = UI.Base.Color.Colors.GetFromString("#2b20d9");
281新增: dataPoint.Stroke = UI.Base.Color.Colors.GetFromString("#2b20d9");
282新增: dataPoint.StrokeThickness = 1;
283新增: Canvas.SetLeft(dataPoint, x - dataPoint.Width / 2);
284新增: Canvas.SetTop(dataPoint, y - dataPoint.Width / 2);
285新增: canvas.Children.Add(dataPoint);
286新增: }
287新增:
288新增: var p = new Polygon();
289新增: p.Stroke = UI.Base.Color.Colors.GetFromString("#2b20d9");
290新增: p.Fill = UI.Base.Color.Colors.GetFromString("#2b20d9", .3);
291新增: p.StrokeThickness = 1;
292新增: p.HorizontalAlignment = HorizontalAlignment.Left;
293新增: p.VerticalAlignment = VerticalAlignment.Center;
294新增: p.Points = pc;
295新增: canvas.Children.Add(p);
296新增:
297新增: }
298新增: private Size MeasureString(TextBlock textBlock)
299新增: {
300新增: var formattedText = new FormattedText(
301新增: textBlock.Text,
302新增: CultureInfo.CurrentCulture,
303新增: FlowDirection.LeftToRight,
304新增: new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch),
305新增: textBlock.FontSize,
306新增: Brushes.Black,
307新增: new NumberSubstitution());
308新增:
309新增: return new Size(formattedText.Width, formattedText.Height);
310新增: }
311新增:
312新增: protected override void OnMouseEnter(MouseEventArgs e)
313新增: {
314新增: base.OnMouseEnter(e);
315新增: VisualStateManager.GoToState(this, "MouseOver", true);
316新增: }
317新增: protected override void OnMouseLeave(MouseEventArgs e)
318新增: {
319新增: base.OnMouseLeave(e);
320新增: VisualStateManager.GoToState(this, "NormalState", true);
321新增: }
322新增: }
323新增:}
修改UI/Controls/Charts/ChartsType.cs+4 −0看文件
@@ -27,5 +27,9 @@ namespace UI.Controls.Charts
2727 /// 柱形图
2828 /// </summary>
2929 Column = 4,
30新增: /// <summary>
31新增: /// 雷达图
32新增: /// </summary>
33新增: Radar = 5,
3034 }
3135}
新增UI/Librays/RadarDemo.cs+157 −0看文件
@@ -0,0 +1,157 @@
1新增:using System;
2新增:using System.Collections.Generic;
3新增:using System.Drawing;
4新增:using System.Drawing.Imaging;
5新增:using System.Linq;
6新增:using System.Text;
7新增:using System.Threading.Tasks;
8新增:
9新增:namespace UI.Librays
10新增:{
11新增: public static class RadarDemo
12新增: {
13新增: static float mW = 1200;
14新增: static float mH = 1200;
15新增: static Dictionary<string, float> mData = new Dictionary<string, float>
16新增: {
17新增: //{ "速度",77},
18新增: { "力量", 72},
19新增: { "防守", 110},
20新增: { "射门", 50},
21新增: { "传球", 80},
22新增: { "耐力", 60 }
23新增: };//维度数据
24新增: static float mCount = mData.Count; //边数
25新增: static float mCenter = mW * 0.5f; //中心点
26新增: static float mRadius = mCenter - 100; //半径(减去的值用于给绘制的文本留空间)
27新增: static double mAngle = (Math.PI * 2) / mCount; //角度
28新增: static Graphics graphics = null;
29新增: static int mPointRadius = 5; // 各个维度分值圆点的半径
30新增: static int textFontSize = 18; //顶点文字大小 px
31新增: const string textFontFamily = "Microsoft Yahei"; //顶点字体
32新增: static Color lineColor = Color.Green;
33新增: static Color fillColor = Color.FromArgb(128, 255, 0, 0);
34新增: static Color fontColor = Color.Black;
35新增: public static void Show()
36新增: {
37新增: Bitmap img = new Bitmap((int)mW, (int)mH);
38新增: graphics = Graphics.FromImage(img);
39新增: graphics.Clear(Color.White);
40新增: img.Save($"{AppDomain.CurrentDomain.BaseDirectory}/0.png", ImageFormat.Jpeg);
41新增: DrawPolygon(graphics);
42新增: img.Save($"{AppDomain.CurrentDomain.BaseDirectory}/1.png", ImageFormat.Png);
43新增: DrawLines(graphics);
44新增: img.Save($"{AppDomain.CurrentDomain.BaseDirectory}/2.png", ImageFormat.Png);
45新增: DrawText(graphics);
46新增: img.Save($"{AppDomain.CurrentDomain.BaseDirectory}/3.png", ImageFormat.Png);
47新增: DrawRegion(graphics);
48新增: img.Save($"{AppDomain.CurrentDomain.BaseDirectory}/4.png", ImageFormat.Png);
49新增: DrawCircle(graphics);
50新增: img.Save($"{AppDomain.CurrentDomain.BaseDirectory}/5.png", ImageFormat.Png);
51新增: img.Dispose();
52新增: graphics.Dispose();
53新增: }
54新增: // 绘制多边形边
55新增: private static void DrawPolygon(Graphics ctx)
56新增: {
57新增: var r = mRadius / mCount; //单位半径
58新增: Pen pen = new Pen(lineColor);
59新增: //画6个圈
60新增: for (var i = 0; i < mCount; i++)
61新增: {
62新增: var points = new List<PointF>();
63新增: var currR = r * (i + 1); //当前半径
64新增: //画6条边
65新增: for (var j = 0; j < mCount; j++)
66新增: {
67新增: var x = (float)(mCenter + currR * Math.Cos(mAngle * j));
68新增: var y = (float)(mCenter + currR * Math.Sin(mAngle * j));
69新增: points.Add(new PointF { X = x, Y = y });
70新增: }
71新增: ctx.DrawPolygon(pen, points.ToArray());
72新增: //break;
73新增: }
74新增: ctx.Save();
75新增: }
76新增: //顶点连线
77新增: private static void DrawLines(Graphics ctx)
78新增: {
79新增: for (var i = 0; i < mCount; i++)
80新增: {
81新增: var x = (float)(mCenter + mRadius * Math.Cos(mAngle * i));
82新增: var y = (float)(mCenter + mRadius * Math.Sin(mAngle * i));
83新增: ctx.DrawLine(new Pen(lineColor), new PointF { X = mCenter, Y = mCenter }, new PointF { X = x, Y = y });
84新增: //break;
85新增: }
86新增: ctx.Save();
87新增: }
88新增: //绘制文本
89新增: private static void DrawText(Graphics ctx)
90新增: {
91新增: var fontSize = textFontSize;//mCenter / 12;
92新增: Font font = new Font(textFontFamily, fontSize, FontStyle.Regular);
93新增: int i = 0;
94新增: foreach (var item in mData)
95新增: {
96新增: var x = (float)(mCenter + mRadius * Math.Cos(mAngle * i));
97新增: var y = (float)(mCenter + mRadius * Math.Sin(mAngle * i) - fontSize);
98新增: if (mAngle * i > 0 && mAngle * i <= Math.PI / 2)
99新增: {
100新增: ctx.DrawString(item.Key, font, new SolidBrush(fontColor), x - ctx.MeasureString(item.Key, font).Width * 0.5f, y + fontSize/* y + fontSize*/);
101新增: }
102新增: else if (mAngle * i > Math.PI / 2 && mAngle * i <= Math.PI)
103新增: {
104新增: ctx.DrawString(item.Key, font, new SolidBrush(fontColor), x - ctx.MeasureString(item.Key, font).Width, y /*y + fontSize*/);
105新增: }
106新增: else if (mAngle * i > Math.PI && mAngle * i <= Math.PI * 3 / 2)
107新增: {
108新增: ctx.DrawString(item.Key, font, new SolidBrush(fontColor), x - ctx.MeasureString(item.Key, font).Width, y);
109新增: }
110新增: else if (mAngle * i > Math.PI * 3 / 2)
111新增: {
112新增: ctx.DrawString(item.Key, font, new SolidBrush(fontColor), x - ctx.MeasureString(item.Key, font).Width * 0.5f, y - fontSize * 0.5f);
113新增: }
114新增: else
115新增: {
116新增: ctx.DrawString(item.Key, font, new SolidBrush(fontColor), x, y /* y + fontSize*/);
117新增: }
118新增: i++;
119新增: }
120新增: ctx.Save();
121新增: }
122新增: //绘制数据区域
123新增: private static void DrawRegion(Graphics ctx)
124新增: {
125新增: int i = 0;
126新增: List<PointF> points = new List<PointF>();
127新增: foreach (var item in mData)
128新增: {
129新增: var x = (float)(mCenter + mRadius * Math.Cos(mAngle * i) * item.Value / 100);
130新增: var y = (float)(mCenter + mRadius * Math.Sin(mAngle * i) * item.Value / 100);
131新增: points.Add(new PointF { X = x, Y = y });
132新增: //ctx.DrawArc(new Pen(lineColor), x, y, r, r, 0, (float)Math.PI * 2);
133新增: i++;
134新增: }
135新增: //GraphicsPath path = new GraphicsPath();
136新增: //path.AddLines(points.ToArray());
137新增: ctx.FillPolygon(new SolidBrush(fillColor), points.ToArray());
138新增: ctx.Save();
139新增: }
140新增: //画点
141新增: private static void DrawCircle(Graphics ctx)
142新增: {
143新增: //var r = mCenter / 18;
144新增: var r = mPointRadius;
145新增: int i = 0;
146新增: foreach (var item in mData)
147新增: {
148新增: var x = (float)(mCenter + mRadius * Math.Cos(mAngle * i) * item.Value / 100);
149新增: var y = (float)(mCenter + mRadius * Math.Sin(mAngle * i) * item.Value / 100);
150新增: ctx.FillPie(new SolidBrush(fillColor), x - r, y - r, r * 2, r * 2, 0, 360);
151新增: //ctx.DrawArc(new Pen(lineColor), x, y, r, r, 0, (float)Math.PI * 2);
152新增: i++;
153新增: }
154新增: ctx.Save();
155新增: }
156新增: }
157新增:}
修改UI/Themes/Charts/Charts.xaml+16 −3看文件
@@ -13,6 +13,9 @@
1313 <Setter.Value>
1414 <ControlTemplate TargetType="{x:Type local:Charts}">
1515 <Grid Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
16新增: <Border x:Name="Radar" Visibility="Collapsed">
17新增:
18新增: </Border>
1619 <Grid x:Name="HorizontalA" Visibility="Collapsed">
1720 <ScrollViewer Visibility="Collapsed" x:Name="ScrollViewer" VerticalScrollBarVisibility="Auto" Height="{Binding ElementName=HorizontalA,Path=ActualHeight}" CanContentScroll="False">
1821 <StackPanel x:Name="Container">
@@ -33,7 +36,7 @@
3336 <RowDefinition Height="*"/>
3437 <RowDefinition Height="auto"/>
3538 </Grid.RowDefinitions>
36删除: <StackPanel>
39新增: <StackPanel x:Name="ColumnTotal">
3740 <TextBlock Text="总计" Foreground="#626262"/>
3841 <TextBlock Margin="0,10,0,0" Text="{TemplateBinding Total}" FontSize="20" Foreground="#1a1919"/>
3942 </StackPanel>
@@ -115,7 +118,7 @@
115118 <Border Width="10" CornerRadius="4" Height="10" Background="{Binding Color,Converter={StaticResource HextoColorConverter}}">
116119 <!--颜色-->
117120 </Border>
118删除:
121新增:
119122 <Border Grid.Column="1" Margin="5,0,0,0">
120123 <!--名称-->
121124 <TextBlock Foreground="#5c5c5c" VerticalAlignment="Center" Text="{Binding Name}" FontSize="12"/>
@@ -249,7 +252,13 @@
249252 <Setter Property="Visibility" Value="Visible" TargetName="ColumnEmpty"/>
250253 <Setter Property="Visibility" Value="Collapsed" TargetName="ColumnMain"/>
251254 </MultiTrigger>
252删除:
255新增: <MultiTrigger>
256新增: <MultiTrigger.Conditions>
257新增: <Condition Property="IsShowTotal" Value="False"/>
258新增: <Condition Property="ChartsType" Value="Column"/>
259新增: </MultiTrigger.Conditions>
260新增: <Setter Property="Visibility" Value="Collapsed" TargetName="ColumnTotal"/>
261新增: </MultiTrigger>
253262 <Trigger Property="ChartsType"
254263 Value="HorizontalA">
255264 <Setter TargetName="HorizontalA" Property="Visibility" Value="Visible"/>
@@ -266,6 +275,10 @@
266275 Value="Column">
267276 <Setter TargetName="Column" Property="Visibility" Value="Visible"/>
268277 </Trigger>
278新增: <Trigger Property="ChartsType"
279新增: Value="Radar">
280新增: <Setter TargetName="Radar" Property="Visibility" Value="Visible"/>
281新增: </Trigger>
269282 </ControlTemplate.Triggers>
270283 </ControlTemplate>
271284 </Setter.Value>
新增UI/Themes/Charts/ChartsItemTypeRadar.xaml+65 −0看文件
@@ -0,0 +1,65 @@
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:ChartsItemTypeRadar}">
6新增: <Setter Property="SnapsToDevicePixels"
7新增: Value="true" />
8新增:
9新增: <Setter Property="Background" Value="Transparent"/>
10新增: <!--<Setter Property="Margin" Value="0,5"/>-->
11新增:
12新增: <Setter Property="Template">
13新增: <Setter.Value>
14新增: <ControlTemplate TargetType="{x:Type local:ChartsItemTypeRadar}">
15新增: <Grid Background="{TemplateBinding Background}">
16新增: <Grid x:Name="Normal">
17新增:
18新增: <Canvas x:Name="Canvas" RenderTransformOrigin=".5,.5">
19新增: <Canvas.RenderTransform>
20新增: <RotateTransform Angle="-90"></RotateTransform>
21新增: </Canvas.RenderTransform>
22新增: </Canvas>
23新增:
24新增: <Rectangle
25新增: x:Name="ValueBlockObj"
26新增: Width="20"
27新增: Height="20"
28新增:
29新增: HorizontalAlignment="Center"
30新增: VerticalAlignment="Center"
31新增: Margin="0"
32新增: RenderTransformOrigin="0.5,0.5"
33新增:
34新增: >
35新增: <Rectangle.Effect>
36新增: <BlurEffect RenderOptions.BitmapScalingMode="LowQuality" Radius="35" RenderingBias="Performance"/>
37新增: </Rectangle.Effect>
38新增: <Rectangle.Fill>
39新增: <LinearGradientBrush RenderOptions.BitmapScalingMode="LowQuality" EndPoint="2,1" StartPoint="-2,0">
40新增: <GradientStop Color="White"/>
41新增: <GradientStop Color="#ff305b" Offset="1"/>
42新增: </LinearGradientBrush>
43新增: </Rectangle.Fill>
44新增: <Rectangle.RenderTransform>
45新增: <ScaleTransform ScaleX="3" ScaleY="3" CenterX="0" CenterY="0"/>
46新增: </Rectangle.RenderTransform>
47新增: </Rectangle>
48新增: </Grid>
49新增: <Grid x:Name="Loading">
50新增: </Grid>
51新增: </Grid>
52新增:
53新增: <!--</Border>-->
54新增:
55新增: <ControlTemplate.Triggers>
56新增: <Trigger Property="IsLoading" Value="True">
57新增: <Setter TargetName="Loading" Property="Visibility" Value="Visible"/>
58新增: <Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
59新增: </Trigger>
60新增: </ControlTemplate.Triggers>
61新增: </ControlTemplate>
62新增: </Setter.Value>
63新增: </Setter>
64新增: </Style>
65新增:</ResourceDictionary>
文件末尾没有换行
修改UI/Themes/Generic.xaml+1 −0看文件
@@ -21,6 +21,7 @@
2121 <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeCard.xaml"/>
2222 <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeMonth.xaml"/>
2323 <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeColumn.xaml"/>
24新增: <ResourceDictionary Source="/Tai;component/Themes/Charts/ChartsItemTypeRadar.xaml"/>
2425
2526 <ResourceDictionary Source="/Tai;component/Themes/Tabbar/Tabbar.xaml"/>
2627 <ResourceDictionary Source="/Tai;component/Themes/DatePickerBar/DatePickerBar.xaml"/>
修改UI/UI.csproj+6 −0看文件
@@ -142,6 +142,7 @@
142142 <Compile Include="Controls\Button\IconButton.cs" />
143143 <Compile Include="Controls\Charts\ChartDataValueType.cs" />
144144 <Compile Include="Controls\Charts\ChartItemTypeColumn.cs" />
145新增: <Compile Include="Controls\Charts\ChartsItemTypeRadar.cs" />
145146 <Compile Include="Controls\Charts\ChartsItemTypeMonth.cs" />
146147 <Compile Include="Controls\Charts\ChartsItemTypeCard.cs" />
147148 <Compile Include="Controls\Charts\ChartsItemTypeA.cs" />
@@ -174,6 +175,7 @@
174175 <Compile Include="Controls\Toggle\Toggle.cs" />
175176 <Compile Include="Controls\Window\ToastType.cs" />
176177 <Compile Include="Extensions\ListExtensions.cs" />
178新增: <Compile Include="Librays\RadarDemo.cs" />
177179 <Compile Include="Librays\Image\Imager.cs" />
178180 <Compile Include="Models\CategoryAppListPageModel.cs" />
179181 <Compile Include="Models\CategoryAppList\ChooseAppModel.cs" />
@@ -276,6 +278,10 @@
276278 <Generator>MSBuild:Compile</Generator>
277279 <SubType>Designer</SubType>
278280 </Page>
281新增: <Page Include="Themes\Charts\ChartsItemTypeRadar.xaml">
282新增: <Generator>MSBuild:Compile</Generator>
283新增: <SubType>Designer</SubType>
284新增: </Page>
279285 <Page Include="Themes\Charts\ChartsItemTypeColumn.xaml">
280286 <Generator>MSBuild:Compile</Generator>
281287 <SubType>Designer</SubType>
修改UI/ViewModels/ChartPageVM.cs+14 −4看文件
@@ -3,6 +3,7 @@ using Core.Models;
33using Core.Servicers.Interfaces;
44using System;
55using System.Collections.Generic;
6新增:using System.Diagnostics;
67using System.Linq;
78using System.Text;
89using System.Threading.Tasks;
@@ -180,7 +181,8 @@ namespace UI.ViewModels
180181 }
181182
182183 Data = chartData;
183删除:
184新增: double totalUse = Data.Sum(m => m.Values.Sum());
185新增: TotalHours = Time.ToHoursString(totalUse);
184186 LoadTopData();
185187 });
186188 }
@@ -236,6 +238,8 @@ namespace UI.ViewModels
236238 }
237239
238240 Data = chartData;
241新增: double totalUse = Data.Sum(m => m.Values.Sum());
242新增: TotalHours = Time.ToHoursString(totalUse);
239243 });
240244
241245
@@ -289,7 +293,8 @@ namespace UI.ViewModels
289293 }
290294
291295 Data = chartData;
292删除:
296新增: double totalUse = Data.Sum(m => m.Values.Sum());
297新增: TotalHours = Time.ToHoursString(totalUse);
293298 LoadTopData();
294299 });
295300
@@ -346,7 +351,8 @@ namespace UI.ViewModels
346351 }
347352
348353 Data = chartData;
349删除:
354新增: double totalUse = Data.Sum(m => m.Values.Sum());
355新增: TotalHours = Time.ToHoursString(totalUse);
350356 LoadTopData();
351357 });
352358 }
@@ -380,9 +386,13 @@ namespace UI.ViewModels
380386 dateStart = dateArr[0];
381387 dateEnd = dateArr[1];
382388 }
383删除: var list = data.GetDateRangelogList(dateStart, dateEnd, 10);
389新增: var list = data.GetDateRangelogList(dateStart, dateEnd, 5);
384390
385391 TopData = MapToChartsData(list);
392新增:
393新增: TopHours = TopData.Count > 0 ? Time.ToHoursString(TopData[0].Value) : "0";
394新增:
395新增: AppCount = data.GetDateRangeAppCount(dateStart, dateEnd).ToString();
386396 });
387397 }
388398