예제 #1
0
        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;
            }
        }
예제 #2
0
 /// <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轴刻度间距
         }
     }
 }
예제 #3
0
 /// <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;
         }
     }
 }
예제 #4
0
 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;
            }
        }