Completed
Last Updated: 15 May 2024 07:49 by ADMIN
Release 2024.2.514 (2024 Q2)

Legend Item Text is not visible in Windows11Dark. This is because the LegendItem  A possible workaround is to subscribe to the VisualItemCreating event. In the event handler, we can create a new LegendItemElement and set its ForeColor.

private void LegendElement_VisualItemCreating(object sender, LegendItemElementCreatingEventArgs e)
{            
    e.ItemElement = new LegendItemElement(e.LegendItem) { ForeColor = Color.Black };
}

Completed
Last Updated: 31 Jan 2024 11:39 by ADMIN
Release 2024 Q1 (2024.1.130)

Before zoom: 

After zoom:

 

Completed
Last Updated: 27 Sep 2022 13:31 by ADMIN
Release R3 2022

Please refer to the attached sample project. Try to select a point.

Expected result: the clicked point should be colored in red.

Actual result: a random point is colored in red even though the label is colored correctly. The attached gif file illustrates the observed result.


Completed
Last Updated: 23 Sep 2022 13:07 by ADMIN
Release R3 2022
Created by: Hendriette
Comments: 0
Category: ChartView
Type: Feature Request
1
The Drop option is available for WPF: https://docs.telerik.com/devtools/wpf/controls/radchart/features/empty-values
Completed
Last Updated: 15 May 2024 07:49 by ADMIN
Release 2024.2.514 (2024 Q2)

Currently, VisualStudio2012DarkTheme has a white background in order to be able to read the labels. This change was done when addressing this item:

https://feedback.telerik.com/winforms/1535458-radchartview-the-axis-label-are-difficult-to-read-in-visualstudio2012darktheme 

However, it is inconsistent a dark theme to have a white background color. The design should be improved to achieve consistent look and feel.

Completed
Last Updated: 18 Oct 2021 09:09 by ADMIN
Release R3 2021 SP1
Completed
Last Updated: 31 Aug 2021 16:03 by ADMIN
Release R3 2021

System.OverflowException: 'Value was either too large or too small for a Decimal.

To reproduce:

var lineSeries = new LineSeries();
lineSeries.DataPoints.Add(new CategoricalDataPoint(0, "A"));
lineSeries.DataPoints.Add(new CategoricalDataPoint(Convert.ToDouble(decimal.MaxValue), "B"));
lineSeries.DataPoints.Add(new CategoricalDataPoint(0, "C"));
lineSeries.DataPoints.Add(new CategoricalDataPoint(decimal.ToDouble(decimal.MaxValue), "D"));
lineSeries.DataPoints.Add(new CategoricalDataPoint(0, "E"));

this.radChartView1.Series.Add(lineSeries);

Completed
Last Updated: 30 Jul 2021 14:46 by ADMIN
Release R3 2021
Completed
Last Updated: 26 May 2021 11:01 by ADMIN
Release R2 2021 SP1

            radChartView1.AreaType = ChartAreaType.Cartesian;
            var scatterSeries = new ScatterSeries();
            scatterSeries.DataPoints.Add(new ScatterDataPoint(15, 19));
            scatterSeries.DataPoints.Add(new ScatterDataPoint(18, 10));
            scatterSeries.DataPoints.Add(new ScatterDataPoint(13, 15));
            scatterSeries.DataPoints.Add(new ScatterDataPoint(10, 8));
            scatterSeries.DataPoints.Add(new ScatterDataPoint(5, 12));
            radChartView1.Series.Add(scatterSeries);

            var verticalAxis = radChartView1.Axes.Get<LinearAxis>(1);
            verticalAxis.Minimum = 0.0d;
            verticalAxis.Maximum = 5.0d;
            verticalAxis.MajorStep = 0.5d;
            verticalAxis.LabelFormat = "{0:0.00} m";

            for (var i = verticalAxis.Minimum; i <= verticalAxis.Maximum; i += verticalAxis.MajorStep)
            {
                var annotation1 = new CartesianGridLineAnnotation();
                annotation1.Axis = this.radChartView1.Axes[1] as CartesianAxis;
                annotation1.BorderColor = Color.LightGray;
                annotation1.BorderDashStyle = DashStyle.Solid;
                annotation1.BorderWidth = 1;
                annotation1.Value = i;
                radChartView1.Annotations.Add(annotation1);
            }

Workaround:

        public RadForm1()
        {
            InitializeComponent();

            this.radChartView1.CreateRenderer += radChartView1_CreateRenderer; 
            InitChart();  
        }

        private void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
        {
            e.Renderer = new CustomRenderer(e.Area as CartesianArea);
        }

        public class CustomRenderer : CartesianRenderer
        {
            public CustomRenderer(CartesianArea area) : base(area)
            {
            }

            protected override void InitializeAnnotations(AnnotationDrawMode drawMode)
            {
                for (int i = 0; i < this.Area.Annotations.Count; i++)
                {
                    if (this.Area.Annotations[i] is CartesianGridLineAnnotation && this.Area.Annotations[i].DrawMode == drawMode)
                    {
                        this.DrawParts.Add(new CustomCartesianGridLineAnnotationDrawPart(this.Area.Annotations[i] as CartesianGridLineAnnotation, this));
                    }
                }
            }
        }

        public class CustomCartesianGridLineAnnotationDrawPart : CartesianGridLineAnnotationDrawPart
        {
            public CustomCartesianGridLineAnnotationDrawPart(CartesianGridLineAnnotation element, CartesianRenderer renderer) : base(element, renderer)
            {
            }

            public override void Draw()
            {
                FieldInfo fi = typeof(CartesianGridLineAnnotation).GetField("model", BindingFlags.Instance | BindingFlags.NonPublic);
                ChartAnnotationModel model = fi.GetValue(this.Element) as ChartAnnotationModel;
                RectangleF rect = ChartRenderer.ToRectangleF(model.LayoutSlot);
                rect.Offset(this.ViewportOffsetX, this.ViewportOffsetY);
                rect.Offset(new PointF(0,1));
                Graphics graphics = this.Renderer.Surface as Graphics;
                RadGdiGraphics radGraphics = new RadGdiGraphics(graphics);

                Rectangle clipRect = ChartRenderer.ToRectangle(this.Element.View.GetArea<CartesianArea>().AreaModel.PlotArea.LayoutSlot);
                clipRect.Offset((int)this.ViewportOffsetX, (int)this.ViewportOffsetY);
                graphics.SetClip(clipRect);

                GraphicsPath path = new GraphicsPath();
                path.AddLine(rect.Location, new PointF(rect.Right, rect.Bottom));

                BorderPrimitiveImpl border = new BorderPrimitiveImpl(this.Element, null);
                border.PaintBorder(radGraphics, null, path, rect);

                rect.Size = graphics.MeasureString(this.Element.Label, this.Element.Font);
                rect.Offset(this.Element.PositonOffset.Width + 1, this.Element.PositonOffset.Height + 1);

                TextParams tp = new TextParams(); 
                tp.font = this.Element.Font;
                tp.foreColor = this.Element.ForeColor;
                tp.paintingRectangle = new RectangleF(rect.X, rect.Y, rect.Height, rect.Width);
                tp.text = this.Element.Label;

                FillPrimitiveImpl fill = new FillPrimitiveImpl(this.Element, null);
                fill.PaintFill(radGraphics, null, rect);

                radGraphics.DrawString(tp, new SizeF(rect.Height, rect.Width));
            }
        }

Completed
Last Updated: 27 Apr 2020 07:40 by ADMIN
Release R2 2020

Currently, RadChartView offers exporting to a Bitmap in one of the following formats: https://docs.microsoft.com/en-us/dotnet/api/system.drawing.imaging.imageformat?view=netframework-4.8

It would be nice to have export functionality to  a vector image.

 
Completed
Last Updated: 09 Mar 2020 14:27 by ADMIN
Release R2 2020 (LIB 2020.1.316)

Hi team,

We need a ChartView with multiple series and multiple Y-axis. The axis color of each Y-axis should be automatically painted according to the palette setting (thank you for the brilliant work - it's very intuitive). However, if clear the series and re-assign a new set of series, the border color of the first axis changes to black, regardless which palette is active. If the palette is set to a new one, the border color can be re-painted correctly. See screenshot as attached.

How to reproduce: Please refer to the attached project for a demo of reproduction. Click the first button to populate new random data. The border color of the first axis should change to black after clicking the button twice and more times. Clicking the second button will force the palette to change and the border color will become normal.

 

Thank you, team.

 

Best,

Yusi

Completed
Last Updated: 12 Feb 2020 12:01 by ADMIN
Release R1 2020 SP1

When you have BarSeries and LineSeries in RadChartView the problem is that the DataPoint.Presenter is always BarSerries, never LineSeries. 

To workaround, create custom renderer:

this.radChartView1.CreateRenderer += this.RadChartView1_CreateRenderer;
private void RadChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
{
    e.Renderer = new CustomCartesianRenderer(e.Area as CartesianArea);
}

public class CustomCartesianRenderer : CartesianRenderer
{
    public CustomCartesianRenderer(CartesianArea area)
        : base(area)
    { }
    public override DataPoint HitTest(int x, int y)
    {
        for (int i = this.DrawParts.Count - 1; i >= 0; i--)
        {
            DataPoint dataPoint = this.DrawParts[i].HitTest(new Point(x, y));
            if (dataPoint != null)
            {
                return dataPoint;
            }
        }

        return base.HitTest(x, y);
    }
}
Completed
Last Updated: 07 Nov 2019 14:04 by ADMIN
Release R1 2020 (LIB 2019.3.1111)
Use attached to reproduce (remove the custom strategy that serves as a workaround)
Completed
Last Updated: 07 Nov 2019 14:12 by ADMIN
Release R1 2020 (LIB 2019.3.1111)
Created by: Dimitar
Comments: 0
Category: ChartView
Type: Bug Report
0

Use attached to reproduce. 

- Click at least 7 times.

 

Workaround: Crete new series instance each time.

Completed
Last Updated: 08 Oct 2019 16:15 by ADMIN
Release R3 2019 SP1
Please run the attached sample project.

Stack trace:
System.NullReferenceException occurred
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=Telerik.WinControls.ChartView
  StackTrace:
       at Telerik.Charting.CombinedBarSeriesRoundLayoutStrategy.ApplyLayoutRoundingVertical(LayoutContext context) in c:\Work\Development\RadControls\RadChartView\Engine\Series\Combination\BarSeries\CombinedBarSeriesRoundLayoutStrategy.cs:line 206
  InnerException: 
 
Completed
Last Updated: 12 Feb 2020 08:00 by ADMIN
Release R1 2020 SP1
Currently, there is no built-in way to indicate an arbitrary area.
Completed
Last Updated: 03 Jul 2019 13:41 by Jonathan
Release R3 2019 (LIB 2019.2.708)
Currently, there is no way to increase the line thickness.
Completed
Last Updated: 03 Jul 2019 11:21 by ADMIN
Release R3 2019 (LIB 2019.2.708)

Use attached to reproduce. 

Workaround:

series.DataPoints.Add(new PieDataPoint(0.01, "Germany"));
series.DataPoints.Add(new PieDataPoint(0.01, "United States"));

 

Completed
Last Updated: 02 Apr 2019 15:45 by Dimitar
Release R2 2019 (LIB 2019.1.408)

After 1 million the decimal places of the labels are not correct, In your image. the labels on the horizontal axis go 999,992.50 - 999,995.00 - 999,997.5 -  1,000,000.00 - *1,000,003.00(should be 1,000,002.50) - 1,000,005.00 - *1,000,008.00(should be 1,000,007.5)

Completed
Last Updated: 23 Nov 2018 11:34 by Dimitar
To reproduce:
            WaterfallSeries series = new WaterfallSeries();
            series.ShowLabels = true;

            series.DataPoints.Add(new WaterfallDataPoint(50000, false, false, "Beginning\nBalance"));
            series.DataPoints.Add(new WaterfallDataPoint(17000, false, false, "Jan"));
            series.DataPoints.Add(new WaterfallDataPoint(14000, false, false, "Feb"));
            series.DataPoints.Add(new WaterfallDataPoint(-12000, false, false, "Mar"));
            series.DataPoints.Add(new WaterfallDataPoint(69000, true, false, "Q1"));
            series.DataPoints.Add(new WaterfallDataPoint(-22000, false, false, "Apr"));
            series.DataPoints.Add(new WaterfallDataPoint(-18000, false, false, "May"));
            series.DataPoints.Add(new WaterfallDataPoint(500, false, false, "Jun"));
            series.DataPoints.Add(new WaterfallDataPoint(-30000, true, false, "Q2"));
            series.DataPoints.Add(new WaterfallDataPoint(39000, false, true, "Ending\nBalance"));
            this.radChartView1.Series.Add(series);

            CartesianGridLineAnnotation annotation1 = new CartesianGridLineAnnotation();
            annotation1.Label = "Annotation";
            annotation1.ForeColor = Color.Lime;
            annotation1.BackColor = Color.Black;
            this.radChartView1.Annotations.Add(annotation1);

Workaround:

        public RadForm1()
        {
            InitializeComponent();
            this.radChartView1.CreateRenderer += radChartView1_CreateRenderer;

            WaterfallSeries series = new WaterfallSeries();
            series.ShowLabels = true;
     
            series.DataPoints.Add(new WaterfallDataPoint(50000, false, false, "Beginning\nBalance"));
            series.DataPoints.Add(new WaterfallDataPoint(17000, false, false, "Jan"));
            series.DataPoints.Add(new WaterfallDataPoint(14000, false, false, "Feb"));
            series.DataPoints.Add(new WaterfallDataPoint(-12000, false, false, "Mar"));
            series.DataPoints.Add(new WaterfallDataPoint(69000, true, false, "Q1"));
            series.DataPoints.Add(new WaterfallDataPoint(-22000, false, false, "Apr"));
            series.DataPoints.Add(new WaterfallDataPoint(-18000, false, false, "May"));
            series.DataPoints.Add(new WaterfallDataPoint(500, false, false, "Jun"));
            series.DataPoints.Add(new WaterfallDataPoint(-30000, true, false, "Q2"));
            series.DataPoints.Add(new WaterfallDataPoint(39000, false, true, "Ending\nBalance"));
            this.radChartView1.Series.Add(series);
 
            CartesianGridLineAnnotation annotation1 = new CartesianGridLineAnnotation();
            annotation1.Label = "Annotation";
            annotation1.ForeColor = Color.Lime;
            annotation1.BackColor = Color.Black;
            annotation1.PositonOffset = new SizeF(0, -20);
            annotation1.Axis = this.radChartView1.Axes[1] as CartesianAxis;
            annotation1.Value = 70000;
            annotation1.BorderColor = Color.Red;
            annotation1.BorderDashStyle = DashStyle.Solid;
            annotation1.BorderWidth = 1;
            this.radChartView1.Annotations.Add(annotation1);
        }

        private void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e)
        {
            e.Renderer = new CustomCartesianRenderer(e.Area as CartesianArea);
        }
 
        public class CustomCartesianRenderer : CartesianRenderer
        {
            public CustomCartesianRenderer(CartesianArea area) : base(area)
            {
            }
 
            protected override void Initialize()
            {
                base.Initialize();
                for (int i = 0; i <= this.DrawParts.Count - 1; i++)
                {
                    CartesianGridLineAnnotationDrawPart annotationPart = this.DrawParts[i] as CartesianGridLineAnnotationDrawPart;
                    if (annotationPart != null)
                    {
                        this.DrawParts[i] = new CustomCartesianGridLineAnnotationDrawPart((CartesianGridLineAnnotation)annotationPart.Element, this);
                    }
                }
            }
        }

        public class CustomCartesianGridLineAnnotationDrawPart : CartesianGridLineAnnotationDrawPart
        {
            public CustomCartesianGridLineAnnotationDrawPart(CartesianGridLineAnnotation element, CartesianRenderer renderer) : base(element, renderer)
            {
            }

            public override void Draw()
            {
                FieldInfo fi = typeof(CartesianGridLineAnnotation).GetField("model", BindingFlags.NonPublic | BindingFlags.Instance);
                ChartAnnotationModel model = fi.GetValue(this.Element) as ChartAnnotationModel;
                RectangleF
                rect = ChartRenderer.ToRectangleF(model.LayoutSlot);
                rect.Offset(this.ViewportOffsetX, this.ViewportOffsetY);

                Graphics graphics = this.Renderer.Surface as Graphics;
                RadGdiGraphics radGraphics = new RadGdiGraphics(graphics);

                Rectangle clipRect = ChartRenderer.ToRectangle(this.Element.View.GetArea<CartesianArea>().AreaModel.PlotArea.LayoutSlot);
                clipRect.Offset((int)this.ViewportOffsetX, (int)this.ViewportOffsetY);
                graphics.SetClip(clipRect);

                GraphicsPath path = new GraphicsPath();
                path.AddLine(rect.Location, new PointF(rect.Right, rect.Bottom));

                BorderPrimitiveImpl border = new BorderPrimitiveImpl(this.Element, null);
                border.PaintBorder(radGraphics, null, path, rect);

                rect.Size = graphics.MeasureString(this.Element.Label, this.Element.Font);
                rect.Offset(this.Element.PositonOffset.Width + 1, this.Element.PositonOffset.Height + 1);

                TextParams tp = new TextParams();
                tp.font = this.Element.Font;
                tp.foreColor = this.Element.ForeColor;
                tp.paintingRectangle = rect;
                tp.text = this.Element.Label;

                FillPrimitiveImpl fill = new FillPrimitiveImpl(this.Element, null);
                fill.PaintFill(radGraphics, null, rect);
            
                TextPrimitiveHtmlImpl text = new TextPrimitiveHtmlImpl();
                text.PaintPrimitive(radGraphics, 0f, new SizeF(1f, 1f), tp);
            }
        }
1 2 3 4 5 6