private void service_GetStatisticsDataCompleted(object sender, GetStatisticsDataCompletedEventArgs e) { if (autoRefreshThread == null) { autoRefreshThread = new Thread(this.AutoRefreshAction) { IsBackground = true, }; autoRefreshThread.Start(); } Refresh.IsEnabled = true; this.Busy.IsBusy = false; if (e.Error != null) { e.Error.ShowError(); return; } if (e.Result != null) { statData = e.Result.ToList(); Chart.Title = string.Format("数据库: {0} 查询时间段:{1} - {2} 数据点总数:{3} 数据总条数:{4}", SearchCondition.DatabasePrefix, SearchCondition.BeginTime.ToString("yyyy/MM/dd HH:mm:ss"), SearchCondition.EndTime.ToString("yyyy/MM/dd HH:mm:ss"), statData.SelectMany(s => s.StatisticsItems).Count(), statData.SelectMany(s => s.StatisticsItems).Sum(s => s.Value)); //初始化时间轴的格式,不同的粒度选择不同的格式 DateTimeAxis dta = Chart.Axes.OfType <DateTimeAxis>().FirstOrDefault(); var span = (TimeSpanType.SelectedItem as ComboBoxItem).Tag.ToString(); Style dtaLabelStyle = new Style(typeof(DateTimeAxisLabel)); switch (span) { case "Second": case "Minute": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:HH:mm}")); break; } case "Hour": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd HH.}")); break; } case "Day": case "Week": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd}")); break; } case "Month": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:yyyy/MM/dd}")); break; } } dta.AxisLabelStyle = dtaLabelStyle; //第一次需要初始化图表 if (Chart.Series.Count == 0) { for (int i = 0; i < statData.Count; i++) { var item = statData[i]; LineSeries ls = new LineSeries { Title = item.TableName, Tag = item.TableName, ItemsSource = item.StatisticsItems, IndependentValuePath = "EndTime", DependentValuePath = "Value", IsSelectionEnabled = true, }; ls.SelectionChanged += new SelectionChangedEventHandler(ls_SelectionChanged); ls.MouseMove += new MouseEventHandler(ls_MouseMove); //点的样式 Style style = new Style(typeof(LineDataPoint)); style.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(colorPool[i]))); style.Setters.Add(new Setter(LineDataPoint.BorderThicknessProperty, new Thickness(0))); style.Setters.Add(new Setter(LineDataPoint.CursorProperty, Cursors.Hand)); style.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag)); style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, Application.Current.Resources["LineNoTransition"] as ControlTemplate)); ls.DataPointStyle = style; //线条的样式 Style style2 = new Style(typeof(Polyline)); style2.Setters.Add(new Setter(Polyline.StrokeThicknessProperty, 1)); style2.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag)); ls.PolylineStyle = style2; Chart.Series.Add(ls); } } else //重新设置数据源就可以了 { for (int i = 0; i < e.Result.Count; i++) { var item = e.Result[i]; var ls = Chart.Series.OfType <LineSeries>().FirstOrDefault(s => s.Title.ToString() == item.TableName); if (ls != null) { ls.ItemsSource = item.StatisticsItems; } } } Chart.LegendItems.OfType <LegendItem>().ToList().ForEach(legendItem => { legendItem.MouseLeftButtonDown += new MouseButtonEventHandler(legendItem_MouseLeftButtonDown); }); //设置y轴的最大高度 var max = statData.SelectMany(r => r.StatisticsItems).Select(p => p.Value).Max(); var axes = Chart.Axes.ToList().OfType <LinearAxis>().Where(a => a.Orientation == AxisOrientation.Y).FirstOrDefault(); axes.Maximum = max + max * 0.1; } }
private void service_GetStatisticsDataCompleted(object sender, GetStatisticsDataCompletedEventArgs e) { if (autoRefreshThread == null) { autoRefreshThread = new Thread(this.AutoRefreshAction) { IsBackground = true, }; autoRefreshThread.Start(); } Refresh.IsEnabled = true; this.Busy.IsBusy = false; if (e.Error != null) { e.Error.ShowError(); return; } if (e.Result != null) { statData = e.Result.ToList(); Chart.Title = string.Format("数据库: {0} 查询时间段:{1} - {2} 数据点总数:{3} 数据总条数:{4}", SearchCondition.DatabasePrefix, SearchCondition.BeginTime.ToString("yyyy/MM/dd HH:mm:ss"), SearchCondition.EndTime.ToString("yyyy/MM/dd HH:mm:ss"), statData.SelectMany(s=>s.StatisticsItems).Count(), statData.SelectMany(s=>s.StatisticsItems).Sum(s=>s.Value)); //初始化时间轴的格式,不同的粒度选择不同的格式 DateTimeAxis dta = Chart.Axes.OfType<DateTimeAxis>().FirstOrDefault(); var span = (TimeSpanType.SelectedItem as ComboBoxItem).Tag.ToString(); Style dtaLabelStyle = new Style(typeof(DateTimeAxisLabel)); switch (span) { case "Second": case "Minute": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:HH:mm}")); break; } case "Hour": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd HH.}")); break; } case "Day": case "Week": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:MM/dd}")); break; } case "Month": { dtaLabelStyle.Setters.Add(new Setter(DateTimeAxisLabel.StringFormatProperty, "{0:yyyy/MM/dd}")); break; } } dta.AxisLabelStyle = dtaLabelStyle; //第一次需要初始化图表 if (Chart.Series.Count == 0) { for (int i = 0; i < statData.Count; i++) { var item = statData[i]; LineSeries ls = new LineSeries { Title = item.TableName, Tag = item.TableName, ItemsSource = item.StatisticsItems, IndependentValuePath = "EndTime", DependentValuePath = "Value", IsSelectionEnabled = true, }; ls.SelectionChanged += new SelectionChangedEventHandler(ls_SelectionChanged); ls.MouseMove += new MouseEventHandler(ls_MouseMove); //点的样式 Style style = new Style(typeof(LineDataPoint)); style.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(colorPool[i]))); style.Setters.Add(new Setter(LineDataPoint.BorderThicknessProperty, new Thickness(0))); style.Setters.Add(new Setter(LineDataPoint.CursorProperty, Cursors.Hand)); style.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag)); style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, Application.Current.Resources["LineNoTransition"] as ControlTemplate)); ls.DataPointStyle = style; //线条的样式 Style style2 = new Style(typeof(Polyline)); style2.Setters.Add(new Setter(Polyline.StrokeThicknessProperty, 1)); style2.Setters.Add(new Setter(Polyline.TagProperty, ls.Tag)); ls.PolylineStyle = style2; Chart.Series.Add(ls); } } else //重新设置数据源就可以了 { for (int i = 0; i < e.Result.Count; i++) { var item = e.Result[i]; var ls = Chart.Series.OfType<LineSeries>().FirstOrDefault(s => s.Title.ToString() == item.TableName); if (ls != null) ls.ItemsSource = item.StatisticsItems; } } Chart.LegendItems.OfType<LegendItem>().ToList().ForEach(legendItem => { legendItem.MouseLeftButtonDown += new MouseButtonEventHandler(legendItem_MouseLeftButtonDown); }); //设置y轴的最大高度 var max = statData.SelectMany(r => r.StatisticsItems).Select(p => p.Value).Max(); var axes = Chart.Axes.ToList().OfType<LinearAxis>().Where(a => a.Orientation == AxisOrientation.Y).FirstOrDefault(); axes.Maximum = max + max * 0.1; } }