예제 #1
0
 public static void GenerateXGrids(this ICanvasRange range, IDataSeries series)
 {
     for (double dy = range.Ymin + range.YTick; dy < range.Ymax; dy += range.YTick)
     {
         Line gridLine = new Line
         {
             X1 = range.NormalizePoint(new Point(range.Xmin, dy)).X,
             Y1 = range.NormalizePoint(new Point(range.Xmin, dy)).Y,
             X2 = range.NormalizePoint(new Point(range.Xmax, dy)).X,
             Y2 = range.NormalizePoint(new Point(range.Xmax, dy)).Y
         };
         series.AddLinePattern(gridLine);
         range.ChartCanvas.Children.Add(gridLine);
     }
 }
예제 #2
0
        public static double CalculateLeftOffset(this ICanvasRange range)
        {
            double offset = 0;

            for (double dy = range.Ymin; dy < range.Ymax; dy += range.YTick)
            {
                TextBlock tb = new TextBlock
                {
                    Text          = dy.ToString(),
                    TextAlignment = TextAlignment.Right
                };
                tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));

                if (offset < tb.DesiredSize.Width)
                {
                    offset = tb.DesiredSize.Width;
                }
            }
            return(offset + 5);
        }
예제 #3
0
        public static void GenerateXLabels(this ICanvasRange range, double leftOffset)
        {
            for (double dx = range.Xmin; dx <= range.Xmax; dx += range.XTick)
            {
                Point pt   = range.NormalizePoint(new Point(dx, range.Ymin));
                Line  tick = new Line
                {
                    Stroke = Brushes.Black,
                    X1     = pt.X,
                    Y1     = pt.Y,
                    X2     = pt.X,
                    Y2     = pt.Y - 5
                };
                range.ChartCanvas.Children.Add(tick);

                TextBlock tb = new TextBlock {
                    Text = dx.ToString()
                };
                tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                range.TextCanvas.Children.Add(tb);
                Canvas.SetLeft(tb, leftOffset + pt.X - tb.DesiredSize.Width / 2);
                Canvas.SetTop(tb, pt.Y + 2 + tb.DesiredSize.Height / 2);
            }
        }
예제 #4
0
        public static void GenerateYLabels(this ICanvasRange range)
        {
            for (double dy = range.Ymin; dy <= range.Ymax; dy += range.YTick)
            {
                Point pt   = range.NormalizePoint(new Point(range.Xmin, dy));
                Line  tick = new Line
                {
                    Stroke = Brushes.Black,
                    X1     = pt.X,
                    Y1     = pt.Y,
                    X2     = pt.X + 5,
                    Y2     = pt.Y
                };
                range.ChartCanvas.Children.Add(tick);

                TextBlock tb = new TextBlock {
                    Text = dy.ToString()
                };
                tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
                range.TextCanvas.Children.Add(tb);
                Canvas.SetRight(tb, range.ChartCanvas.Width + 10);
                Canvas.SetTop(tb, pt.Y);
            }
        }