void cbChartDateMeasureUnit_SelectedIndexChanged(object sender, RoutedEventArgs e) { XYDiagram2D diagram = (XYDiagram2D)chartControl.Diagram; DateTimeMeasureUnit unit = (DateTimeMeasureUnit)Enum.Parse(typeof(DateTimeMeasureUnit), cbChartDateMeasureUnit.SelectedItem.ToString()); diagram.AxisX.DateTimeScaleOptions = new ManualDateTimeScaleOptions() { MeasureUnit = unit, GridAlignment = (DateTimeGridAlignment)unit, AutoGrid = false }; switch (unit) { case DateTimeMeasureUnit.Year: diagram.AxisX.Label.TextPattern = "{A:yyyy}"; break; case DateTimeMeasureUnit.Quarter: diagram.AxisX.Label.TextPattern = "{A:q}"; break; case DateTimeMeasureUnit.Month: diagram.AxisX.Label.TextPattern = "{A:y}"; break; default: break; } }
/// <summary> /// 将X轴格式化成时间轴 /// </summary> /// <param name="chart">ChartControl</param> /// <param name="dateTimeMeasureUnit">X轴刻度单位</param> /// <param name="dateTimeGridAlignment">X轴刻度间距的单位</param> public static void SetAxisXTime(this ChartControl chart, DateTimeMeasureUnit dateTimeMeasureUnit, DateTimeGridAlignment dateTimeGridAlignment) { if (chart.Diagram is XYDiagram) { XYDiagram _diagram = (XYDiagram)chart.Diagram; if (_diagram != null) { _diagram.AxisX.DateTimeScaleOptions.MeasureUnit = dateTimeMeasureUnit; //X轴刻度单位 _diagram.AxisX.DateTimeScaleOptions.GridAlignment = dateTimeGridAlignment; //X轴刻度间距 } } }
/// <summary> /// 将X轴格式化成时间轴 /// </summary> /// <param name="chart">ChartControl</param> /// <param name="dateTimeMeasureUnit">X轴刻度单位</param> /// <param name="dateTimeGridAlignment">X轴刻度间距的单位</param> /// <param name="formatString">时间格式;eg:yyyy-MM</param> public static void SetAxisXTime(this ChartControl chart, DateTimeMeasureUnit dateTimeMeasureUnit, DateTimeGridAlignment dateTimeGridAlignment, string formatString) { if (chart.Diagram is XYDiagram) { XYDiagram _diagram = (XYDiagram)chart.Diagram; if (_diagram != null) { _diagram.AxisX.DateTimeScaleOptions.MeasureUnit = dateTimeMeasureUnit; //X轴刻度单位 _diagram.AxisX.DateTimeScaleOptions.GridAlignment = dateTimeGridAlignment; //X轴刻度间距 // 这里可能有问题 _diagram.AxisX.Label.TextPattern = formatString; } } }
public void DinhDangX(DateTimeGridAlignment x, DateTimeMeasureUnit y) { }
private void CheckInitializeTimeAxis() { if (Chart.Series[0].ArgumentScaleType != ScaleType.DateTime) { ((XYDiagram)Chart.Diagram).AxisX.Label.TextPattern = "{A}"; if (Chart.Series[0].Points.Count > 0) { ((XYDiagram)Chart.Diagram).AxisX.WholeRange.SetMinMaxValues( Chart.Series[0].Points.Min(i => i.ArgumentX.NumericalArgument), Chart.Series[0].Points.Max(i => i.ArgumentX.NumericalArgument) ); } return; } int totalMinutes = Visual.MeasureUnitMultiplier; DateTime first = DateTime.MinValue; DateTime last = DateTime.MaxValue; //((XYDiagram)Chart.Diagram).AxisX.DateTimeScaleOptions.MeasureUnit = (DateTimeMeasureUnit)Enum.Parse(typeof(DateTimeMeasureUnit), Visual.MeasureUnit.ToString()); ((XYDiagram)Chart.Diagram).AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Automatic; if (Visual.Items != null && Visual.Items.Count > 1) { object data1 = Visual.Items[1]; object data0 = Visual.Items[0]; object dataLast = Visual.Items.Last(); PropertyInfo pi = data1.GetType().GetProperty("Time", BindingFlags.Public | BindingFlags.Instance); if (pi != null) { DateTime time1 = (DateTime)pi.GetValue(data1); DateTime time0 = (DateTime)pi.GetValue(data0); first = time1; last = (DateTime)pi.GetValue(dataLast); totalMinutes = (int)((time1 - time0).TotalMinutes); } } DateTimeMeasureUnit unit = (DateTimeMeasureUnit)Enum.Parse(typeof(DateTimeMeasureUnit), Visual.MeasureUnit.ToString()); int ms = 0; if (unit == DateTimeMeasureUnit.Minute) { ms = 60000; } else if (unit == DateTimeMeasureUnit.Second) { ms = 1000; } else { throw new NotImplementedException(); } ((XYDiagram)Chart.Diagram).ZoomingOptions.AxisXMaxZoomPercent = 100 * (last - first).TotalMilliseconds / (Visual.MeasureUnitMultiplier * ms); //StrategyDataItemInfo di = Visual.DataItemInfos.FirstOrDefault(i => i.Type == DataType.DateTime && i.FieldName == "Time"); //if(di != null) { // if(di.UseCustomTimeUnit) { // ((XYDiagram)Chart.Diagram).AxisX.DateTimeScaleOptions.MeasureUnit = (DateTimeMeasureUnit)Enum.Parse(typeof(DateTimeMeasureUnit), di.TimeUnit.ToString()); // ((XYDiagram)Chart.Diagram).AxisX.DateTimeScaleOptions.MeasureUnitMultiplier = di.TimeUnitMeasureMultiplier; // } //} //((XYDiagram)Chart.Diagram).AxisX.DateTimeScaleOptions.MeasureUnitMultiplier = totalMinutes; ((XYDiagram)Chart.Diagram).AxisX.Label.ResolveOverlappingOptions.AllowRotate = false; ((XYDiagram)Chart.Diagram).AxisX.Label.ResolveOverlappingOptions.AllowStagger = false; ((XYDiagram)Chart.Diagram).AxisX.LabelVisibilityMode = AxisLabelVisibilityMode.AutoGeneratedAndCustom; if (first != DateTime.MinValue) { DateTime current = first.Date; while (current <= last) { ConstantLine constantLine = new ConstantLine(current.ToShortDateString(), current) { Color = Color.FromArgb(0x40, Color.LightGray), ShowInLegend = false }; constantLine.Title.Visible = false; ((XYDiagram)Chart.Diagram).AxisX.ConstantLines.Add(constantLine); ((XYDiagram)Chart.Diagram).AxisX.CustomLabels.Add(new CustomAxisLabel(current.ToShortDateString(), current)); current = current.AddDays(1); } } StrategyDataItemInfo time = Visual.DataItemInfos.FirstOrDefault(i => i.Name == "Time"); string datePattern = "{A:dd.MM hh:mm:ss}"; if (time != null && !string.IsNullOrEmpty(time.LabelPattern)) { datePattern = "{A:" + time.LabelPattern + "}"; } if (Chart.Series[0].ArgumentScaleType == ScaleType.Numerical) { ((XYDiagram)Chart.Diagram).AxisX.Label.TextPattern = "{A}"; } else { ((XYDiagram)Chart.Diagram).AxisX.Label.TextPattern = datePattern; } }