I'm using Syncfusion's ColumnSeries. I want to use it to display the ColumnBar even when the data value is 0. Is it possible?
like this one. attached below
|
<chart:SfChart.Series>
<local:ColumnSeriesExt x:Name="series1"
ItemsSource="{Binding Data}"
XBindingPath="XValue"
YBindingPath="YValue"
CornerRadius="20"
Color="DarkCyan"
CustomColor="Cyan">
</local:ColumnSeriesExt>
</chart:SfChart.Series> |
|
public class CustomChartRenderer : SfChartRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<SfChart> e)
{
base.OnElementChanged(e);
}
public override SfChartExt CreateNativeChart()
{
return new CustomChart(Android.App.Application.Context);
}
}
public class CustomChart : SfChartExt
{
public CustomChart(Android.Content.Context context) : base(context)
{
}
protected override Native.ChartSeries CreateNativeChartSeries(ChartSeries formSeries)
{
if (formSeries is ColumnSeriesExt)
{
return new CustomColumnSeries() { CustomColor = (formSeries as ColumnSeriesExt).CustomColor};
}
return base.CreateNativeChartSeries(formSeries);
}
}
public class CustomColumnSeries : Native.ColumnSeries
{
public Xamarin.Forms.Color CustomColor { get; set; }
protected override Native.ChartSegment CreateSegment()
{
return new CustomColumnSegment();
}
}
public class CustomColumnSegment : Native.ColumnSegment
{
Paint paint = new Paint();
public override void OnDraw(Canvas canvas)
{
if (Top == Bottom)
{
if (!float.IsNaN(Left) && !float.IsNaN(Top) && !float.IsNaN(Right) && !float.IsNaN(Bottom))
{
if (paint.Handle == IntPtr.Zero)
{
paint = new Paint();
}
paint.Color = SfChartRenderer.GetWindowsColor((this.Series as CustomColumnSeries).CustomColor);
paint.SetStyle(Paint.Style.Fill);
paint.StrokeWidth = StrokeWidth;
canvas.Save();
var halfWidth= (Right - Left) / 2;
canvas.DrawCircle(Left + halfWidth, Bottom - halfWidth, halfWidth, paint);
canvas.Restore();
}
}
else
{
base.OnDraw(canvas);
}
}
} |