To reproduce: 1. Add RadChartView with drill down and two RadCheckBox on the form 2. Subscribe to the ToggleStateChanged event of RadCheckBox and set the IsVisible property to true/false 3. In handler of DrillDown event set the series`s IsVisible property to be equal to checkbox`s Checked property 4. In few cases the series are not visible when changing the IsVisible property and view. Unfortunately due to the nature of the issue we cannot provide a workaround for it.
To reproduce: - Add three line series and only set their point size. - At runtime remove the second series. - The points color is not updated corectly. Workaround - Set colors in code like this: lineSerie1.BorderColor = Color.Red; lineSerie1.BackColor = Color.Red; lineSerie2.BackColor = Color.Green; lineSerie2.BorderColor = Color.Green; lineSerie3.BackColor = Color.Blue; lineSerie3.BorderColor = Color.Blue;
To reproduce: - Show the legend and the add remove series at runtime. - The legend items must not have text.
To reproduce: public RadForm1() { InitializeComponent(); date = DateTime.Now; } int dayCounter; Random rnd = new Random(); DateTime date; Timer timer = new Timer(); protected override void OnLoad(EventArgs e) { base.OnLoad(e); LineSeries lineSeria = new LineSeries(); DateTimeContinuousAxis continuousAxis = new DateTimeContinuousAxis(); continuousAxis.LabelFormat = "{0:dd}"; lineSeria.HorizontalAxis = continuousAxis; radChartView1.Series.Add(lineSeria); for (int i = 0; i < 500; i++) { radChartView1.Series[0].DataPoints.Add(new CategoricalDataPoint(rnd.Next(1000), date.AddDays(dayCounter++))); } timer.Tick += timer_Tick; timer.Interval = 200; timer.Start(); } void timer_Tick(object sender, EventArgs e) { foreach (CategoricalDataPoint point in radChartView1.Series[0].DataPoints) { // point.Value = rnd.Next(1000); point.Category = date.AddDays(dayCounter++); } } Workaround: void timer_Tick(object sender, EventArgs e) { DateTimeContinuousAxis continuousAxis = ((LineSeries)radChartView1.Series[0]).HorizontalAxis as DateTimeContinuousAxis; HybridDictionary hashSet = typeof(Axis).GetField("hashSet", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(continuousAxis) as HybridDictionary; hashSet.Clear(); }
To reproduce: - Set the palette from the default context menu. - Try to get the palette name. Workaround: class MyChartDataPointElementController : ChartDataPointElementController { protected override RadContextMenu CreatePaletteMenu() { //return base.CreatePaletteMenu(); RadContextMenu menu = new RadContextMenu(); RadChartLocalizationProvider localizationProvider = RadChartLocalizationProvider.CurrentProvider; RadMenuItem paletteItem = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.Palette)); menu.Items.Add(paletteItem); RadMenuItem item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteArctic)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteAutumn)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteCold)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteFlower)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteForest)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteGrayscale)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteGround)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteLilac)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteMetro)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteNatural)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PalettePastel)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteRainbow)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSpring)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSummer)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteWarm)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteWindows8)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSun)); item.Click += new System.EventHandler(item_Click); paletteItem.Items.Add(item); return menu; } void item_Click(object sender, System.EventArgs e) { RadMenuItem item = sender as RadMenuItem; if (item != null) { this.Area.View.Palette = ChartPalette.FromKnownPalette(item.Text); this.Area.View.Palette.Name = item.Text; } } } Change the controller like this: radChartView1.Controllers.Add(new MyChartDataPointElementController());
Until the feature gets implemented please use the suggested solution here: http://www.telerik.com/support/kb/winforms/details/integrating-panzoom-trackball-and-lassozoom-controllers-in-radchartview
To reproduce: - Add DateTimeContinuousAxis to a chart and set its MajorStep property. Workaround: Create the DateTimeContinuousAxis in the code behind.
To reproduce: - Just add StochasticSlowIndicator to a chart.
To reproduce: - Implement the drill down functionality with a PieSeries. - Workaround: class MyPieSeries : PieSeries, ILegendInfoProvider { public LegendItemCollection LegendInfos { get { return new LegendItemCollection(); } } }
To reproduce: AreaSeries areaSeries = new AreaSeries(); areaSeries.DataPoints.Add(new CategoricalDataPoint(13, "Jan")); areaSeries.DataPoints.Add(new CategoricalDataPoint(20, "Apr")); areaSeries.DataPoints.Add(new CategoricalDataPoint(15, "Jul")); areaSeries.DataPoints.Add(new CategoricalDataPoint(16, "Oct")); this.radChartView1.Series.Add(areaSeries); areaSeries.BackColor = Color.Transparent; areaSeries.CombineMode = ChartSeriesCombineMode.Stack; AreaSeries areaSeries2 = new AreaSeries(); areaSeries2.DataPoints.Add(new CategoricalDataPoint(15, "Jan")); areaSeries2.DataPoints.Add(new CategoricalDataPoint(25, "Apr")); areaSeries2.DataPoints.Add(new CategoricalDataPoint(27, "Jul")); areaSeries2.DataPoints.Add(new CategoricalDataPoint(18, "Oct")); this.radChartView1.Series.Add(areaSeries2); areaSeries2.CombineMode = ChartSeriesCombineMode.Stack; The area underneath the transparent one shouldn't be displayed in this case because they are stacked. There is no area underneath the bottom layer to display. They are each STACKED on top of each other, they should not be layered in front of each other.
To reproduce: - Add two donut series and set their RadiusFactor so both series can be seen. - Add ChartSelectionController. - You will be able to select points from the firs series only. Workaround: class MyPieRenderer : PieRenderer { public MyPieRenderer(PieArea area) : base(area) { } public override DataPoint HitTest(int x, int y) { if (this.DrawParts.Count > 0) { foreach (var item in this.DrawParts) { if (item is PieSeriesDrawPart) { Dictionary<PieDataPoint, GraphicsPath> paths = ((PieSeriesDrawPart)item).PointPaths; foreach (PieDataPoint point in paths.Keys) { GraphicsPath path = new GraphicsPath(); paths.TryGetValue(point, out path); if (path != null) { if (path.IsVisible(x, y)) { return point; } } } } } } return null; } } private void RadChartView1_CreateRenderer(object sender, ChartViewCreateRendererEventArgs e) { e.Renderer = new MyPieRenderer((PieArea)e.Area); }
Gets the range that is actually visible on the plot area when the chart is zoomed in.
Use the attached project to reproduce. Workaround: Hide the panel after the form is shown.
To reproduce: - Localize the palette names with the localization provider. - Change the palette with the context menu. Workaround: class MyChartDataPointElementController : ChartDataPointElementController { protected override RadContextMenu CreatePaletteMenu() { RadContextMenu menu = new RadContextMenu(); RadChartLocalizationProvider localizationProvider = RadChartLocalizationProvider.CurrentProvider; RadMenuItem paletteItem = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.Palette)); menu.Items.Add(paletteItem); RadMenuItem item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteArctic)); item.Click += new System.EventHandler(item_Click); item.Tag = "Arctic"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteAutumn)); item.Click += new System.EventHandler(item_Click); item.Tag = "Autumn"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteCold)); item.Click += new System.EventHandler(item_Click); item.Tag = "Gold"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteFlower)); item.Click += new System.EventHandler(item_Click); item.Tag = "Flower"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteForest)); item.Click += new System.EventHandler(item_Click); item.Tag = "Forest"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteGrayscale)); item.Click += new System.EventHandler(item_Click); item.Tag = "Grayscale"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteGround)); item.Click += new System.EventHandler(item_Click); item.Tag = "Ground"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteLilac)); item.Click += new System.EventHandler(item_Click); item.Tag = "Lilac"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteMetro)); item.Click += new System.EventHandler(item_Click); item.Tag = "Metro"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteNatural)); item.Click += new System.EventHandler(item_Click); item.Tag = "Natural"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PalettePastel)); item.Click += new System.EventHandler(item_Click); item.Tag = "Pastel"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteRainbow)); item.Click += new System.EventHandler(item_Click); item.Tag = "Rainbow"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSpring)); item.Click += new System.EventHandler(item_Click); item.Tag = "Spring"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSummer)); item.Click += new System.EventHandler(item_Click); item.Tag = "Summer"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteWarm)); item.Click += new System.EventHandler(item_Click); item.Tag = "Warm"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteWindows8)); item.Click += new System.EventHandler(item_Click); item.Tag = "Windows8"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSun)); item.Click += new System.EventHandler(item_Click); item.Tag = "Sun"; paletteItem.Items.Add(item); return menu; } void item_Click(object sender, System.EventArgs e) { RadMenuItem item = sender as RadMenuItem; if (item != null) { this.Area.View.Palette = ChartPalette.FromKnownPalette(item.Tag.ToString()); } } } // change the controller this.radChartView1.Controllers.Add(new MyChartDataPointElementController());
To reproduce: LineSeries lineSeries = new LineSeries(); 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")); lineSeries.LegendTitle = "Series A asdafsafasfd fgsdfg sdfs dfg dafsvsd"; this.radChartView1.Series.Add(lineSeries); LineSeries lineSeries2 = new LineSeries(); 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")); lineSeries2.LegendTitle = "Series B sdf asdf adfasdfas dfadsf asdf sadf awef"; this.radChartView1.Series.Add(lineSeries2); LineSeries lineSeries3 = new LineSeries(); lineSeries3.DataPoints.Add(new CategoricalDataPoint(13, "Jan")); lineSeries3.DataPoints.Add(new CategoricalDataPoint(14, "Apr")); lineSeries3.DataPoints.Add(new CategoricalDataPoint(12, "Jul")); lineSeries3.DataPoints.Add(new CategoricalDataPoint(25, "Oct")); lineSeries3.LegendTitle = "Series C sdf asdf adfasdfas dfadsf asdf sadf awef"; this.radChartView1.Series.Add(lineSeries3); this.radChartView1.ShowLegend = true; this.radChartView1.ChartElement.LegendPosition = Telerik.WinControls.UI.LegendPosition.Bottom; radChartView1.ChartElement.LegendElement.StackElement.Orientation = Orientation.Horizontal; Workaround: specify minimum height for the legend radChartView1.ChartElement.LegendElement.MinSize = new Size(0, 50);
To reproduce: LegendItem item = new LegendItem(); item.Element.BorderColor = Color.Black; item.Element.BackColor = Color.Yellow; item.Title = "Custom item"; this.radChartView1.ChartElement.LegendElement.Items.Add(item); Workaround: class MyLegendItem : LegendItem { string title = ""; protected override void SetLegendTitle(string title) { base.SetLegendTitle(title); if (this.Element is LegendItemStyleElement) { this.title = title; } } protected override string GetLegendTitle() { if (this.Element is LegendItemStyleElement) { return title; } return base.GetLegendTitle(); } }
To reproduce: Public Sub New() InitializeComponent() Me.RadChartView1.ShowTitle = True Me.RadChartView1.ChartElement.TitleElement.TextWrap = True Me.RadChartView1.Title = "This is a very long chart title that can't fit in a single line" Dim barSeries As New BarSeries("Performance", "RepresentativeName") barSeries.Name = "Q1" barSeries.DataPoints.Add(New CategoricalDataPoint(177, "Harley")) barSeries.DataPoints.Add(New CategoricalDataPoint(128, "White")) barSeries.DataPoints.Add(New CategoricalDataPoint(143, "Smith")) barSeries.DataPoints.Add(New CategoricalDataPoint(111, "Jones")) barSeries.DataPoints.Add(New CategoricalDataPoint(118, "Marshall")) Me.RadChartView1.Series.Add(barSeries) End Sub Private Sub radButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click Dim filePath As String = "..\..\..\exprtedChart.png" Me.RadChartView1.ExportToImage(filePath, Me.RadChartView1.Size, System.Drawing.Imaging.ImageFormat.Png) Process.Start(filePath) End Sub Workaround: titleSize must consider the chart's width Public Sub New() InitializeComponent() AddHandler Me.RadChartView1.CreateRenderer, AddressOf CreateRenderer Me.RadChartView1.ShowTitle = True Me.RadChartView1.ChartElement.TitleElement.TextWrap = True Me.RadChartView1.Title = "This is a very long chart title that can't fit in a single line" Dim barSeries As New BarSeries("Performance", "RepresentativeName") barSeries.Name = "Q1" barSeries.DataPoints.Add(New CategoricalDataPoint(177, "Harley")) barSeries.DataPoints.Add(New CategoricalDataPoint(128, "White")) barSeries.DataPoints.Add(New CategoricalDataPoint(143, "Smith")) barSeries.DataPoints.Add(New CategoricalDataPoint(111, "Jones")) barSeries.DataPoints.Add(New CategoricalDataPoint(118, "Marshall")) Me.RadChartView1.Series.Add(barSeries) End Sub Private Sub radButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click Dim filePath As String = "..\..\..\exprtedChart.png" Using fs As New FileStream(filePath, FileMode.Create, FileAccess.Write) ExportToImage(Me.RadChartView1, fs, Me.RadChartView1.Size, System.Drawing.Imaging.ImageFormat.Png) End Using Process.Start(filePath) End Sub Public Sub ExportToImage(chart As RadChartView, stream As Stream, size As Size, imageFormat As ImageFormat) If Not chart.IsLoaded Then chart.LoadElementTree() End If Dim bmp As New Bitmap(size.Width, size.Height) Dim graphics__1 As Graphics = Graphics.FromImage(bmp) graphics__1.Clear(Color.White) Dim titleSize As SizeF = graphics__1.MeasureString(chart.Title, chart.ChartElement.TitleElement.Font, chart.Width) If chart.ChartElement.TitleElement.TextOrientation = Orientation.Vertical Then Dim swap As Single = titleSize.Height titleSize.Height = titleSize.Width titleSize.Width = swap End If Dim titleRect As New RadRect(0, 0, titleSize.Width, titleSize.Height) Dim legendRect As New RadRect(0, 0, size.Width, size.Height) Dim chartRect As RadRect = legendRect Select Case chart.ChartElement.TitlePosition Case TitlePosition.Top, TitlePosition.Bottom titleRect.Width = size.Width Exit Select Case TitlePosition.Right, TitlePosition.Left titleRect.Height = size.Height Exit Select End Select 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 Then Select Case chart.ChartElement.TitlePosition Case TitlePosition.Top legendRect.Y += titleRect.Height chartRect.Y += titleRect.Height legendRect.Height -= titleRect.Height chartRect.Height -= titleRect.Height Exit Select Case TitlePosition.Right titleRect.X = size.Width - chart.ChartElement.TitleElement.Size.Width titleRect.Height = size.Height legendRect.Width -= titleRect.Width chartRect.Width -= titleRect.Width Exit Select Case TitlePosition.Bottom titleRect.Y = size.Height - chart.ChartElement.TitleElement.Size.Height titleRect.Width = size.Width legendRect.Height -= titleRect.Height chartRect.Height -= titleRect.Height Exit Select Case TitlePosition.Left titleRect.Height = size.Height legendRect.X += titleRect.Width chartRect.X += titleRect.Width legendRect.Width -= titleRect.Width chartRect.Width -= titleRect.Width Exit Select End Select End If If chart.ShowLegend Then Select Case chart.ChartElement.LegendPosition Case LegendPosition.Right If chart.ChartElement.TitlePosition = TitlePosition.Right Then legendRect.X = titleRect.X - chart.ChartElement.LegendElement.Size.Width Else legendRect.X = size.Width - chart.ChartElement.LegendElement.Size.Width End If legendRect.Width = chart.ChartElement.LegendElement.Size.Width chartRect.Width -= legendRect.Width + chart.View.Margin.Right Exit Select Case LegendPosition.Bottom If chart.ChartElement.TitlePosition = TitlePosition.Bottom Then legendRect.Y = titleRect.Y - chart.ChartElement.LegendElement.Size.Height Else legendRect.Y = size.Height - chart.ChartElement.LegendElement.Size.Height End If legendRect.Height = chart.ChartElement.LegendElement.Size.Height chartRect.Height -= legendRect.Height Exit Select Case LegendPosition.Left legendRect.Width = chart.ChartElement.LegendElement.Size.Width chartRect.X += legendRect.Width + chart.View.Margin.Left chartRect.Width -= legendRect.Width + chart.View.Margin.Left Exit Select Case LegendPosition.Top legendRect.Height = chart.ChartElement.LegendElement.Size.Height chartRect.Y += legendRect.Height chartRect.Height -= legendRect.Height Exit Select Case LegendPosition.Float legendRect.Width = chart.ChartElement.LegendElement.Size.Width legendRect.Height = chart.ChartElement.LegendElement.Size.Height Dim xRatio As Double = size.Width / Me.Size.Width Dim yRatio As Double = size.Height / Me.Size.Height legendRect.X = (chart.ChartElement.LegendOffset.X * xRatio) + (If((chart.ChartElement.TitlePosition = TitlePosition.Left), titleRect.Right, 0.0)) legendRect.Y = (chart.ChartElement.LegendOffset.Y * yRatio) + (If((chart.ChartElement.TitlePosition = TitlePosition.Top), titleRect.Bottom, 0.0F)) Exit Select End Select End If If chart.ShowLegend Then Dim xTransform As Single = CSng(legendRect.X) - chart.ChartElement.LegendElement.ControlBoundingRectangle.X + _ (CSng(legendRect.Width) - chart.ChartElement.LegendElement.ControlBoundingRectangle.Width) / 2.0F Dim yTransform As Single = CSng(legendRect.Y) - chart.ChartElement.LegendElement.ControlBoundingRectangle.Y + _ (CSng(legendRect.Height) - chart.ChartElement.LegendElement.ControlBoundingRectangle.Height) / 2.0F graphics__1.TranslateTransform(xTransform, yTransform) chart.ChartElement.LegendElement.Paint(New RadGdiGraphics(graphics__1), _ chart.ChartElement.LegendElement.ControlBoundingRectangle, 0.0F, New SizeF(1.0F, 1.0F), True) graphics__1.ResetTransform() End If Dim radGraphics As New RadGdiGraphics(graphics__1) If chart.ShowTitle Then 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) End If chart.View.Layout(chartRect) renderer.Draw(graphics__1) bmp.Save(stream, imageFormat) chart.View.Layout() End Sub Private Function GetTitleDrawRectangle(drawArea As RectangleF, textRect As SizeF, textAlignment As ContentAlignment) As RectangleF Select Case textAlignment Case ContentAlignment.BottomCenter Return New RectangleF(New PointF(drawArea.X + (drawArea.Width - textRect.Width) / 2.0F, 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) / 2.0F, drawArea.Y + (drawArea.Height - textRect.Height) / 2.0F), textRect) Case ContentAlignment.MiddleLeft Return New RectangleF(New PointF(drawArea.X, drawArea.Y + (drawArea.Height - textRect.Height) / 2.0F), textRect) Case ContentAlignment.MiddleRight Return New RectangleF(New PointF(drawArea.Right - textRect.Width, drawArea.Y + (drawArea.Height - textRect.Height) / 2.0F), 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) Case Else Return New RectangleF(drawArea.Location, textRect) End Select End Function Dim renderer As CartesianRenderer Private Sub CreateRenderer(sender As Object, e As ChartViewCreateRendererEventArgs) e.Renderer = New CartesianRenderer(DirectCast(e.Area, CartesianArea)) renderer = e.Renderer End Sub
Steps to reproduce: 1. Add RadChartView with two BarSeries 2. Set the Name property of series 3. Set the SelectionMode property to SingleDataPoint 4. Subscribe to the SelectedPointChanging/SelectedPointChanged events. 5. Run the form and select points from different series. The OldSelectedSeries/NewSelectedSeries properties always return the name of the first series now matter which series is selected. Workaround: void radChartView1_SelectedPointChanged(object sender, ChartViewSelectedPointChangedEventArgs e) { BarSeries series = (e.NewSelectedPoint).Presenter as BarSeries; if (series.Name == "Q1") { Console.WriteLine(series.Name); } else if (series.Name == "Q2") { Console.WriteLine(series.Name); } }