Public Class RadForm2
Public Sub New()
InitializeComponent()
AddHandler Me.RadChartView1.CreateRenderer, AddressOf radChartView1_CreateRenderer
Me.RadChartView1.ShowSmartLabels = True
Me.RadChartView1.ShowPanZoom = True
Dim barSeries As New BarSeries()
Dim barSeries1 As New BarSeries()
Dim barSeries2 As New BarSeries()
Dim rand As New Random()
barSeries.DataPoints.Add(New CategoricalDataPoint(101, 0))
barSeries1.DataPoints.Add(New CategoricalDataPoint(101, 0))
barSeries2.DataPoints.Add(New CategoricalDataPoint(101, 0))
For i As Integer = 1 To 9
barSeries.DataPoints.Add(New CategoricalDataPoint(rand.[Next](100), i))
barSeries1.DataPoints.Add(New CategoricalDataPoint(rand.[Next](100), i))
barSeries2.DataPoints.Add(New CategoricalDataPoint(rand.[Next](100), i))
Next
barSeries.ShowLabels = True
barSeries.DrawLinesToLabels = True
barSeries1.ShowLabels = True
barSeries1.DrawLinesToLabels = True
barSeries2.ShowLabels = True
barSeries2.DrawLinesToLabels = True
Me.RadChartView1.Series.Add(barSeries)
Me.RadChartView1.Series.Add(barSeries1)
Me.RadChartView1.Series.Add(barSeries2)
End Sub
Private Sub radChartView1_CreateRenderer(sender As Object, e As ChartViewCreateRendererEventArgs)
'e.Renderer = New CustomCartesianRenderer(TryCast(e.Area, CartesianArea))
End Sub
End Class
Workaround: Create a custom renderer
Public Class CustomCartesianRenderer
Inherits CartesianRenderer
Public Sub New(area As CartesianArea)
MyBase.New(area)
End Sub
Protected Overrides Sub Initialize()
MyBase.Initialize()
For i As Integer = 0 To Me.DrawParts.Count - 1
Dim labelPart As BarLabelElementDrawPart = TryCast(Me.DrawParts(i), BarLabelElementDrawPart)
If labelPart IsNot Nothing Then
Me.DrawParts(i) = New CustomBarLabelElementDrawPart(DirectCast(labelPart.Element, BarSeries), Me)
End If
Next
End Sub
End Class
Public Class CustomBarLabelElementDrawPart
Inherits BarLabelElementDrawPart
Public Sub New(owner As ChartSeries, renderer As IChartRenderer)
MyBase.New(owner, renderer)
End Sub
Public Overrides Sub Draw()
Dim graphics As Graphics = TryCast(Me.Renderer.Surface, Graphics)
Dim cartesianSeries As CartesianSeries = TryCast(Me.Element, CartesianSeries)
If cartesianSeries IsNot Nothing Then
Dim area As CartesianArea = DirectCast(cartesianSeries.[GetType]().GetField("area", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(cartesianSeries), CartesianArea)
Dim clipRect As RectangleF = DirectCast(area.[GetType]().GetMethod("GetCartesianClipRect", BindingFlags.Instance Or BindingFlags.NonPublic).Invoke(area, New Object() {}), RectangleF)
graphics.SetClip(clipRect)
End If
MyBase.Draw()
graphics.ResetClip()
End Sub
Protected Overrides Function GetLineStart(label As LabelElement, point As DataPointElement, isSmartLabel As Boolean) As PointF
Dim lineStart As PointF = MyBase.GetLineStart(label, point, isSmartLabel)
Dim x As Single = CSng(TryCast(Me.Element.View, IChartView).PlotOriginX)
Dim y As Single = CSng(TryCast(Me.Element.View, IChartView).PlotOriginY)
lineStart.X += x
lineStart.Y += y
Return lineStart
End Function
Protected Overrides Function GetLineEnd(label As LabelElement, point As DataPointElement, isSmartLabel As Boolean) As PointF
Dim lineEnd As PointF = MyBase.GetLineEnd(label, point, isSmartLabel)
If Not isSmartLabel Then
Dim x As Single = CSng(TryCast(Me.Element.View, IChartView).PlotOriginX)
Dim y As Single = CSng(TryCast(Me.Element.View, IChartView).PlotOriginY)
lineEnd.X += x
lineEnd.Y += y
End If
Return lineEnd
End Function
End Class