Workaround: CartesianRenderer renderer = null; public RadForm1() { InitializeComponent(); this.radChartView1.CreateRenderer += new ChartViewCreateRendererEventHandler(radChartView1_CreateRenderer); LineSeries lineSeries = new LineSeries(); lineSeries.LegendTitle = "Line 1"; lineSeries.DataPoints.Add(new CategoricalDataPoint(20, "Jan")); lineSeries.DataPoints.Add(new CategoricalDataPoint(22, "Apr")); lineSeries.DataPoints.Add(new CategoricalDataPoint(12, "Jul")); lineSeries.DataPoints.Add(new CategoricalDataPoint(19, "Oct")); this.radChartView1.Series.Add(lineSeries); LineSeries lineSeries2 = new LineSeries(); lineSeries2.LegendTitle = "Line 2"; lineSeries2.DataPoints.Add(new CategoricalDataPoint(18, "Jan")); lineSeries2.DataPoints.Add(new CategoricalDataPoint(15, "Apr")); lineSeries2.DataPoints.Add(new CategoricalDataPoint(17, "Jul")); lineSeries2.DataPoints.Add(new CategoricalDataPoint(22, "Oct")); this.radChartView1.Series.Add(lineSeries2); this.radChartView1.ShowLegend = true; this.radChartView1.ChartElement.LegendPosition = LegendPosition.Float; this.radChartView1.ChartElement.LegendOffset = new Point(200, 95); CartesianArea area = this.radChartView1.GetArea<CartesianArea>(); area.ShowGrid = true; } private void radChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e) { renderer = new CartesianRenderer(e.Area as CartesianArea); e.Renderer = renderer; } private void radButton1_Click(object sender, EventArgs e) { string filePath = @"..\..\..\exportedChart" + DateTime.Now.ToLongTimeString().Replace(":", "_") + ".png"; using (MemoryStream stream = new MemoryStream()) { ExportToImage(this.radChartView1, stream, new Size(1000 ,500), ImageFormat.Png, filePath); } Process.Start(filePath); } public void ExportToImage(RadChartView chart, Stream stream, Size size, ImageFormat imageFormat, string filePath) { if (!this.IsLoaded) { this.LoadElementTree(); } size = Telerik.WinControls.TelerikDpiHelper.ScaleSize(size, chart.ChartElement.DpiScaleFactor); Bitmap bmp = new Bitmap(size.Width, size.Height); Graphics graphics = Graphics.FromImage(bmp); graphics.Clear(Color.White); SizeF titleSize = graphics.MeasureString(chart.Title, chart.ChartElement.TitleElement.Font, this.Width); if (chart.ChartElement.TitleElement.TextOrientation == Orientation.Vertical) { float swap = titleSize.Height; titleSize.Height = titleSize.Width; titleSize.Width = swap; } RadRect titleRect = new RadRect(0, 0, titleSize.Width, titleSize.Height); RadRect legendRect = new RadRect(0, 0, size.Width, size.Height); RadRect chartRect = legendRect; switch (chart.ChartElement.TitlePosition) { case TitlePosition.Top: case TitlePosition.Bottom: titleRect.Width = size.Width; break; case TitlePosition.Right: case TitlePosition.Left: titleRect.Height = size.Height; break; } chartRect.X += chart.View.Margin.Left; chartRect.Y += chart.View.Margin.Top; chartRect.Width -= chart.View.Margin.Horizontal; chartRect.Height -= chart.View.Margin.Vertical; if (chart.ShowTitle) { switch (chart.ChartElement.TitlePosition) { case TitlePosition.Top: legendRect.Y += titleRect.Height; chartRect.Y += titleRect.Height; legendRect.Height -= titleRect.Height; chartRect.Height -= titleRect.Height; break; case TitlePosition.Right: titleRect.X = size.Width - chart.ChartElement.TitleElement.Size.Width; titleRect.Height = size.Height; legendRect.Width -= titleRect.Width; chartRect.Width -= titleRect.Width; break; case TitlePosition.Bottom: titleRect.Y = size.Height - chart.ChartElement.TitleElement.Size.Height; titleRect.Width = size.Width; legendRect.Height -= titleRect.Height; chartRect.Height -= titleRect.Height; break; case TitlePosition.Left: titleRect.Height = size.Height; legendRect.X += titleRect.Width; chartRect.X += titleRect.Width; legendRect.Width -= titleRect.Width; chartRect.Width -= titleRect.Width; break; } } chart.View.Layout(chartRect); renderer.Draw(graphics); if (chart.ShowLegend) { switch (chart.ChartElement.LegendPosition) { case LegendPosition.Right: if (chart.ChartElement.TitlePosition == TitlePosition.Right) { legendRect.X = titleRect.X - chart.ChartElement.LegendElement.Size.Width; } else { legendRect.X = size.Width - chart.ChartElement.LegendElement.Size.Width; } legendRect.Width = chart.ChartElement.LegendElement.Size.Width; chartRect.Width -= legendRect.Width; break; case LegendPosition.Bottom: if (chart.ChartElement.TitlePosition == TitlePosition.Bottom) { legendRect.Y = titleRect.Y - chart.ChartElement.LegendElement.Size.Height; } else { legendRect.Y = size.Height - chart.ChartElement.LegendElement.Size.Height; } legendRect.Height = chart.ChartElement.LegendElement.Size.Height; chartRect.Height -= legendRect.Height; break; case LegendPosition.Left: legendRect.Width = chart.ChartElement.LegendElement.Size.Width; chartRect.X += legendRect.Width; chartRect.Width -= legendRect.Width; break; case LegendPosition.Top: legendRect.Height = chart.ChartElement.LegendElement.Size.Height; chartRect.Y += legendRect.Height; chartRect.Height -= legendRect.Height; break; case LegendPosition.Float: legendRect.Width = chart.ChartElement.LegendElement.Size.Width; legendRect.Height = chart.ChartElement.LegendElement.Size.Height; double xRatio = size.Width / this.Size.Width; double yRatio = size.Height / this.Size.Height; legendRect.X = (chart.ChartElement.LegendOffset.X * xRatio) + ((chart.ChartElement.TitlePosition == TitlePosition.Left) ? titleRect.Right : 0d); legendRect.Y = (chart.ChartElement.LegendOffset.Y * yRatio) + ((chart.ChartElement.TitlePosition == TitlePosition.Top) ? titleRect.Bottom : 0f); break; } } if (chart.ShowLegend) { float xTransform = (float)legendRect.X - chart.ChartElement.LegendElement.ControlBoundingRectangle.X + ((float)legendRect.Width - chart.ChartElement.LegendElement.ControlBoundingRectangle.Width) / 2f; float yTransform = (float)legendRect.Y - chart.ChartElement.LegendElement.ControlBoundingRectangle.Y + ((float)legendRect.Height - chart.ChartElement.LegendElement.ControlBoundingRectangle.Height) / 2f; graphics.TranslateTransform(xTransform, yTransform); chart.ChartElement.LegendElement.Paint(new RadGdiGraphics(graphics), chart.ChartElement.LegendElement.ControlBoundingRectangle, 0f, new SizeF(1f, 1f), true); graphics.ResetTransform(); } RadGdiGraphics radGraphics = new RadGdiGraphics(graphics); if (chart.ShowTitle) { radGraphics.DrawString(chart.Title, GetTitleDrawRectangle(ChartRenderer.ToRectangleF(titleRect), titleSize, chart.ChartElement.TitleElement.TextAlignment), chart.ChartElement.TitleElement.Font, chart.ChartElement.TitleElement.ForeColor, chart.ChartElement.TitleElement.TextParams.CreateStringFormat(), chart.ChartElement.TitleElement.TextOrientation, chart.ChartElement.TitleElement.FlipText); } if (imageFormat == ImageFormat.Emf || imageFormat == ImageFormat.Wmf) { Metafile metafile = new Metafile(stream, graphics.GetHdc()); // file is created here using (Graphics g = Graphics.FromImage(metafile)) { g.DrawImage(bmp, Point.Empty); } metafile.Dispose(); graphics.ReleaseHdc(); } else { bmp.Save(stream, imageFormat); } chart.View.Layout(); Image img = Image.FromStream(stream); graphics.DrawImage(img, new Point(0, 0)); img.Save(filePath); } private RectangleF GetTitleDrawRectangle(RectangleF drawArea, SizeF textRect, ContentAlignment textAlignment) { switch (textAlignment) { case ContentAlignment.BottomCenter: return new RectangleF(new PointF(drawArea.X + (drawArea.Width - textRect.Width) / 2f, drawArea.Bottom - textRect.Height), textRect); case ContentAlignment.BottomLeft: return new RectangleF(new PointF(drawArea.X, drawArea.Bottom - textRect.Height), textRect); case ContentAlignment.BottomRight: return new RectangleF(new PointF(drawArea.Right - textRect.Width, drawArea.Bottom - textRect.Height), textRect); case ContentAlignment.MiddleCenter: return new RectangleF(new PointF(drawArea.X + (drawArea.Width - textRect.Width) / 2f, drawArea.Y + (drawArea.Height - textRect.Height) / 2f), textRect); case ContentAlignment.MiddleLeft: return new RectangleF(new PointF(drawArea.X, drawArea.Y + (drawArea.Height - textRect.Height) / 2f), textRect); case ContentAlignment.MiddleRight: return new RectangleF(new PointF(drawArea.Right - textRect.Width, drawArea.Y + (drawArea.Height - textRect.Height) / 2f), textRect); case ContentAlignment.TopCenter: return new RectangleF(new PointF(drawArea.X + (drawArea.Width - textRect.Width) / 2, drawArea.Y), textRect); case ContentAlignment.TopLeft: return new RectangleF(drawArea.Location, textRect); case ContentAlignment.TopRight: return new RectangleF(new PointF(drawArea.Right - textRect.Width, drawArea.Y), textRect); default: return new RectangleF(drawArea.Location, textRect); } }