提交记录修改UI/Controls/Charts/Charts.cs+82 −3看文件
修改UI/Models/ChartPageModel.cs+5 −0看文件
修改UI/Themes/Charts/Charts.xaml+6 −6看文件
修改UI/ViewModels/ChartPageVM.cs+29 −14看文件
修改UI/Views/ChartPage.xaml+1 −1看文件
| @@ -456,6 +456,24 @@ namespace UI.Controls.Charts | ||
| 456 | 456 | new PropertyMetadata((double)0) |
| 457 | 457 | ); |
| 458 | 458 | |
| 459 | 新增: #region 是否以堆叠的形式展示(仅柱状图有效) | |
| 460 | 新增: /// <summary> | |
| 461 | 新增: /// 是否以堆叠的形式展示(仅柱状图有效) | |
| 462 | 新增: /// </summary> | |
| 463 | 新增: public bool IsStack | |
| 464 | 新增: { | |
| 465 | 新增: get { return (bool)GetValue(IsStackProperty); } | |
| 466 | 新增: set { SetValue(IsStackProperty, value); } | |
| 467 | 新增: } | |
| 468 | 新增: public static readonly DependencyProperty IsStackProperty = | |
| 469 | 新增: DependencyProperty.Register("IsStack", | |
| 470 | 新增: typeof(bool), | |
| 471 | 新增: typeof(Charts), | |
| 472 | 新增: new PropertyMetadata(false, new PropertyChangedCallback(OnPropertyChanged))); | |
| 473 | 新增: | |
| 474 | 新增: | |
| 475 | 新增: #endregion | |
| 476 | 新增: | |
| 459 | 477 | private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) |
| 460 | 478 | { |
| 461 | 479 | var charts = (d as Charts); |
| @@ -1097,8 +1115,17 @@ namespace UI.Controls.Charts | ||
| 1097 | 1115 | |
| 1098 | 1116 | double total = 0; |
| 1099 | 1117 | // 查找最大值 |
| 1118 | 新增: int colValueCount = Data.FirstOrDefault().Values.Length; | |
| 1119 | 新增: double[] tempValueArr = new double[colValueCount]; | |
| 1120 | 新增: | |
| 1100 | 1121 | foreach (var item in Data) |
| 1101 | 1122 | { |
| 1123 | 新增: | |
| 1124 | 新增: for (int i = 0; i < colValueCount; i++) | |
| 1125 | 新增: { | |
| 1126 | 新增: tempValueArr[i] += item.Values[i]; | |
| 1127 | 新增: } | |
| 1128 | 新增: | |
| 1102 | 1129 | // 查找最大值 |
| 1103 | 1130 | double max = item.Values.Max(); |
| 1104 | 1131 | if (max > maxValue) |
| @@ -1114,6 +1141,13 @@ namespace UI.Controls.Charts | ||
| 1114 | 1141 | { |
| 1115 | 1142 | maxValue = DataMaximum; |
| 1116 | 1143 | } |
| 1144 | 新增: else | |
| 1145 | 新增: { | |
| 1146 | 新增: if (IsStack) | |
| 1147 | 新增: { | |
| 1148 | 新增: maxValue = tempValueArr.Max(); | |
| 1149 | 新增: } | |
| 1150 | 新增: } | |
| 1117 | 1151 | if (maxValue == 0) |
| 1118 | 1152 | { |
| 1119 | 1153 | maxValue = 10; |
| @@ -1205,8 +1239,11 @@ namespace UI.Controls.Charts | ||
| 1205 | 1239 | colValueRect.Width = colValueRectWidth; |
| 1206 | 1240 | colValueRect.Height = value / maxValue * canvasHeight; |
| 1207 | 1241 | colValueRect.Fill = UI.Base.Color.Colors.GetFromString(colColor); |
| 1208 | 删除: colValueRect.RadiusX = 4; | |
| 1209 | 删除: colValueRect.RadiusY = 4; | |
| 1242 | 新增: if (!IsStack) | |
| 1243 | 新增: { | |
| 1244 | 新增: colValueRect.RadiusX = 4; | |
| 1245 | 新增: colValueRect.RadiusY = 4; | |
| 1246 | 新增: } | |
| 1210 | 1247 | Canvas.SetLeft(colValueRect, i * columnBorderWidth + margin); |
| 1211 | 1248 | Canvas.SetBottom(colValueRect, colNameHeight); |
| 1212 | 1249 | |
| @@ -1264,7 +1301,20 @@ namespace UI.Controls.Charts | ||
| 1264 | 1301 | for (int i = 0; i < rectList.Count; i++) |
| 1265 | 1302 | { |
| 1266 | 1303 | var rect = rectList[i]; |
| 1267 | 删除: Panel.SetZIndex(rect, i); | |
| 1304 | 新增: if (IsStack) | |
| 1305 | 新增: { | |
| 1306 | 新增: double marginBottom = 0; | |
| 1307 | 新增: if (i > 0) | |
| 1308 | 新增: { | |
| 1309 | 新增: var lastRect = rectList[i - 1]; | |
| 1310 | 新增: marginBottom = Canvas.GetBottom(lastRect) + lastRect.Height; | |
| 1311 | 新增: Canvas.SetBottom(rect, marginBottom); | |
| 1312 | 新增: } | |
| 1313 | 新增: } | |
| 1314 | 新增: else | |
| 1315 | 新增: { | |
| 1316 | 新增: Panel.SetZIndex(rect, i); | |
| 1317 | 新增: } | |
| 1268 | 1318 | } |
| 1269 | 1319 | } |
| 1270 | 1320 | |
| @@ -1320,6 +1370,35 @@ namespace UI.Controls.Charts | ||
| 1320 | 1370 | _typeColumnCanvas.Children.Add(midValueLine); |
| 1321 | 1371 | |
| 1322 | 1372 | |
| 1373 | 新增: // 平均 | |
| 1374 | 新增: double avg = tempValueArr.Average(); | |
| 1375 | 新增: double avgY = (avg) / maxValue * canvasHeight; | |
| 1376 | 新增: | |
| 1377 | 新增: var avgValueText = new TextBlock(); | |
| 1378 | 新增: avgValueText.Text = Covervalue(avg); | |
| 1379 | 新增: avgValueText.FontSize = 12; | |
| 1380 | 新增: avgValueText.Foreground = UI.Base.Color.Colors.GetFromString(StateData.ThemeColor); | |
| 1381 | 新增: avgValueText.ToolTip = "平均值"; | |
| 1382 | 新增: | |
| 1383 | 新增: var avgValueTextSize = UIHelper.MeasureString(avgValueText); | |
| 1384 | 新增: Panel.SetZIndex(avgValueText, 1000); | |
| 1385 | 新增: Canvas.SetRight(avgValueText, 0); | |
| 1386 | 新增: Canvas.SetBottom(avgValueText, avgY + colNameHeight - avgValueTextSize.Height / 2); | |
| 1387 | 新增: _typeColumnCanvas.Children.Add(avgValueText); | |
| 1388 | 新增: | |
| 1389 | 新增: var avgValueLine = new Line(); | |
| 1390 | 新增: avgValueLine.Stroke = UI.Base.Color.Colors.GetFromString(StateData.ThemeColor); | |
| 1391 | 新增: avgValueLine.StrokeDashArray = new DoubleCollection() { 2, 5 }; | |
| 1392 | 新增: avgValueLine.StrokeThickness = 1; | |
| 1393 | 新增: avgValueLine.X1 = colNameBottomMargin; | |
| 1394 | 新增: avgValueLine.X2 = canvasWidth - colNameBottomMargin - (avgValueTextSize.Width); | |
| 1395 | 新增: avgValueLine.Y1 = canvasHeight - avgY + colNameBottomMargin + avgValueLine.StrokeThickness; | |
| 1396 | 新增: avgValueLine.Y2 = canvasHeight - avgY + colNameBottomMargin + avgValueLine.StrokeThickness; | |
| 1397 | 新增: //avgValueLine.Width = canvasWidth; | |
| 1398 | 新增: //avgValueLine.Height = 10; | |
| 1399 | 新增: //Canvas.SetBottom(avgValueLine, avgY + colNameHeight); | |
| 1400 | 新增: _typeColumnCanvas.Children.Add(avgValueLine); | |
| 1401 | 新增: | |
| 1323 | 1402 | // 组装分类统计数据 |
| 1324 | 1403 | var infoList = new List<ChartColumnInfoModel>(); |
| 1325 | 1404 | list = list.OrderByDescending(m => m.Values.Sum()).ToList(); |
| @@ -129,5 +129,10 @@ namespace UI.Models | ||
| 129 | 129 | /// 雷达图数据 |
| 130 | 130 | /// </summary> |
| 131 | 131 | public List<ChartsDataModel> RadarData { get { return RadarData_; } set { RadarData_ = value; OnPropertyChanged(); } } |
| 132 | 新增: private bool IsChartStack_ = true; | |
| 133 | 新增: /// <summary> | |
| 134 | 新增: /// 是否以堆叠形式展示 | |
| 135 | 新增: /// </summary> | |
| 136 | 新增: public bool IsChartStack { get { return IsChartStack_; } set { IsChartStack_ = value; OnPropertyChanged(); } } | |
| 132 | 137 | } |
| 133 | 138 | } |
| @@ -103,7 +103,7 @@ | ||
| 103 | 103 | PlacementTarget="{TemplateBinding ValuesPopupPlacementTarget}" |
| 104 | 104 | HorizontalOffset="{TemplateBinding ValuesPopupHorizontalOffset}"> |
| 105 | 105 | <Border |
| 106 | 删除: Background="White" | |
| 106 | 新增: Background="{DynamicResource PopupBackgroundBrush}" | |
| 107 | 107 | CornerRadius="12" |
| 108 | 108 | Padding="10" |
| 109 | 109 | Margin="10"> |
| @@ -116,8 +116,8 @@ | ||
| 116 | 116 | Width="15" |
| 117 | 117 | Height="15" |
| 118 | 118 | SnapsToDevicePixels="False" |
| 119 | 删除: Data="M 0 0 L 7.5 7.5 L 15 0" Fill="White" | |
| 120 | 删除: Stroke="White" | |
| 119 | 新增: Data="M 0 0 L 7.5 7.5 L 15 0" Fill="{DynamicResource PopupBackgroundBrush}" | |
| 120 | 新增: Stroke="{DynamicResource PopupBackgroundBrush}" | |
| 121 | 121 | StrokeThickness="1" |
| 122 | 122 | VerticalAlignment="Bottom" |
| 123 | 123 | HorizontalAlignment="Left" |
| @@ -144,7 +144,7 @@ | ||
| 144 | 144 | <Setter Property="Template"> |
| 145 | 145 | <Setter.Value> |
| 146 | 146 | <ControlTemplate TargetType="{x:Type ListViewItem}"> |
| 147 | 删除: <Border BorderBrush="Transparent" BorderThickness="2" x:Name="Border" Background="White" Margin="0" CornerRadius="10"> | |
| 147 | 新增: <Border BorderBrush="Transparent" BorderThickness="2" x:Name="Border" Margin="0" CornerRadius="10"> | |
| 148 | 148 | |
| 149 | 149 | <ContentPresenter/> |
| 150 | 150 | </Border> |
| @@ -176,11 +176,11 @@ | ||
| 176 | 176 | |
| 177 | 177 | <Border Grid.Column="1" Margin="5,0,0,0"> |
| 178 | 178 | <!--名称--> |
| 179 | 删除: <TextBlock Foreground="#3d3d3d" VerticalAlignment="Center" Text="{Binding Name}" FontSize="12"/> | |
| 179 | 新增: <TextBlock Foreground="{DynamicResource DefaultTextBrush}" VerticalAlignment="Center" Text="{Binding Name}" FontSize="12"/> | |
| 180 | 180 | </Border> |
| 181 | 181 | <Border Grid.Column="2"> |
| 182 | 182 | <!--总计和百分比--> |
| 183 | 删除: <TextBlock FontSize="12" Margin="5,0,0,0" Foreground="#FF8A8A8A" VerticalAlignment="Center" Text="{Binding Text}"/> | |
| 183 | 新增: <TextBlock FontSize="12" Margin="5,0,0,0" Foreground="{DynamicResource SubTextBrush}" VerticalAlignment="Center" Text="{Binding Text}"/> | |
| 184 | 184 | |
| 185 | 185 | </Border> |
| 186 | 186 | |
| @@ -53,17 +53,24 @@ namespace UI.ViewModels | ||
| 53 | 53 | Name = "上周" |
| 54 | 54 | }); |
| 55 | 55 | |
| 56 | 删除: var chartDataModeOptions = new List<SelectItemModel>(); | |
| 57 | 删除: chartDataModeOptions.Add(new SelectItemModel() | |
| 56 | 新增: var chartDataModeOptions = new List<SelectItemModel> | |
| 58 | 57 | { |
| 59 | 删除: Id = 1, | |
| 60 | 删除: Name = "分类", | |
| 61 | 删除: }); | |
| 62 | 删除: chartDataModeOptions.Add(new SelectItemModel() | |
| 63 | 删除: { | |
| 64 | 删除: Id = 2, | |
| 65 | 删除: Name = "汇总" | |
| 66 | 删除: }); | |
| 58 | 新增: new SelectItemModel() | |
| 59 | 新增: { | |
| 60 | 新增: Id = 1, | |
| 61 | 新增: Name = "默认视图", | |
| 62 | 新增: }, | |
| 63 | 新增: new SelectItemModel() | |
| 64 | 新增: { | |
| 65 | 新增: Id = 2, | |
| 66 | 新增: Name = "汇总视图" | |
| 67 | 新增: }, | |
| 68 | 新增: new SelectItemModel() | |
| 69 | 新增: { | |
| 70 | 新增: Id = 3, | |
| 71 | 新增: Name = "分类视图" | |
| 72 | 新增: } | |
| 73 | 新增: }; | |
| 67 | 74 | |
| 68 | 75 | ChartDataModeOptions = chartDataModeOptions; |
| 69 | 76 | ChartDataMode = chartDataModeOptions[0]; |
| @@ -156,6 +163,14 @@ namespace UI.ViewModels | ||
| 156 | 163 | } |
| 157 | 164 | if (e.PropertyName == nameof(ChartDataMode)) |
| 158 | 165 | { |
| 166 | 新增: if (ChartDataMode.Id == 1) | |
| 167 | 新增: { | |
| 168 | 新增: IsChartStack = true; | |
| 169 | 新增: } | |
| 170 | 新增: else | |
| 171 | 新增: { | |
| 172 | 新增: IsChartStack = false; | |
| 173 | 新增: } | |
| 159 | 174 | LoadData(); |
| 160 | 175 | } |
| 161 | 176 | } |
| @@ -231,7 +246,7 @@ namespace UI.ViewModels | ||
| 231 | 246 | chartData.Add(dataItem); |
| 232 | 247 | } |
| 233 | 248 | } |
| 234 | 删除: if (ChartDataMode.Id == 1) | |
| 249 | 新增: if (ChartDataMode.Id == 1 || ChartDataMode.Id == 3) | |
| 235 | 250 | { |
| 236 | 251 | Data = chartData; |
| 237 | 252 | } |
| @@ -308,7 +323,7 @@ namespace UI.ViewModels | ||
| 308 | 323 | } |
| 309 | 324 | } |
| 310 | 325 | |
| 311 | 删除: if (ChartDataMode.Id == 1) | |
| 326 | 新增: if (ChartDataMode.Id == 1 || ChartDataMode.Id == 3) | |
| 312 | 327 | { |
| 313 | 328 | Data = chartData; |
| 314 | 329 | } |
| @@ -384,7 +399,7 @@ namespace UI.ViewModels | ||
| 384 | 399 | chartData.Add(dataItem); |
| 385 | 400 | } |
| 386 | 401 | } |
| 387 | 删除: if (ChartDataMode.Id == 1) | |
| 402 | 新增: if (ChartDataMode.Id == 1 || ChartDataMode.Id == 3) | |
| 388 | 403 | { |
| 389 | 404 | Data = chartData; |
| 390 | 405 | } |
| @@ -463,7 +478,7 @@ namespace UI.ViewModels | ||
| 463 | 478 | |
| 464 | 479 | |
| 465 | 480 | |
| 466 | 删除: if (ChartDataMode.Id == 1) | |
| 481 | 新增: if (ChartDataMode.Id == 1 || ChartDataMode.Id == 3) | |
| 467 | 482 | { |
| 468 | 483 | Data = chartData; |
| 469 | 484 | } |
| @@ -151,7 +151,7 @@ | ||
| 151 | 151 | <Border Grid.Row="1" Margin="0,20,0,0" Width="680" HorizontalAlignment="Left" Background="{DynamicResource SettingPanelBgBrush}" Padding="20" CornerRadius="10"> |
| 152 | 152 | <StackPanel > |
| 153 | 153 | <select:Select Height="30" IsShowIcon="False" SelectedItem="{Binding ChartDataMode,Mode=TwoWay}" Options="{Binding ChartDataModeOptions}"/> |
| 154 | 删除: <charts:Charts Height="310" ColumnSelectedIndex="{Binding ColumnSelectedIndex,Mode=TwoWay}" IsShowTotal="False" DataMaximum="{Binding DataMaximum}" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}" IsCanColumnSelect="{Binding IsCanColumnSelect}"/> | |
| 154 | 新增: <charts:Charts IsStack="{Binding IsChartStack}" Height="310" ColumnSelectedIndex="{Binding ColumnSelectedIndex,Mode=TwoWay}" IsShowTotal="False" DataMaximum="{Binding DataMaximum}" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}" IsCanColumnSelect="{Binding IsCanColumnSelect}"/> | |
| 155 | 155 | <base:View Value="{Binding DayHoursSelectedTime}" Condition="not empty"> |
| 156 | 156 | <StackPanel> |
| 157 | 157 | <Border Margin="0,10,0,5" HorizontalAlignment="Left" Padding="10" CornerRadius="10"> |

