Hello,
is it possible to create my own custom template for scatter chart data in case I need to display a shape that is not in supported ShapeTypes?
|
<local:ChartExt>
<chart:SfChart.Series>
<chart:ScatterSeries x:Name="ChartSeries1"
ItemsSource="{Binding ScatterSeriesData}"
StrokeWidth="1"
ScatterWidth="15"
ScatterHeight="15"
XBindingPath="YValue1"
YBindingPath="YValue2">
</chart:ScatterSeries>
</chart:SfChart.Series>
</local:ChartExt> |
|
public class ChartExt : SfChart
{
} |
|
public class CustomChartRenderer : SfChartRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Syncfusion.SfChart.XForms.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 Com.Syncfusion.Charts.ChartSeries CreateNativeChartSeries(Syncfusion.SfChart.XForms.ChartSeries formSeries)
{
if (formSeries is Syncfusion.SfChart.XForms.ScatterSeries)
{
return new CustomScatterSeries();
}
return base.CreateNativeChartSeries(formSeries);
}
}
public class CustomScatterSeries : Native.ScatterSeries
{
protected override Native.ChartSegment CreateSegment()
{
return new CustomLineSegment();
}
}
public class CustomLineSegment : Native.ScatterSegment
{
private readonly float width = 5;
Paint paint = new Paint();
public override void OnDraw(Canvas canvas)
{
var w = this.ScatterWidth;
var h = this.ScatterHeight;
paint.StrokeWidth = this.Series.StrokeWidth;
paint.Color = this.Color;
Path path = new Path();
path.MoveTo(this.CenterX - w, this.CenterY);
path.LineTo(this.CenterX - w/4, this.CenterY - h/4);
path.LineTo(this.CenterX, this.CenterY - h);
path.LineTo(this.CenterX + w / 4, this.CenterY - h / 4);
path.LineTo(this.CenterX + w, this.CenterY);
path.LineTo(this.CenterX + w / 4, this.CenterY + h / 4);
path.LineTo(this.CenterX, this.CenterY + h);
path.LineTo(this.CenterX - w / 4, this.CenterY + h / 4);
path.LineTo(this.CenterX - w, this.CenterY);
path.Close();
canvas.DrawPath(path, paint);
}
} |
Data marker seems to be working just fine. Thank you!
|
<local:ChartExt>
<chart:SfChart.Series>
<chart:ScatterSeries x:Name="ChartSeries1"
ItemsSource="{Binding ScatterSeriesData}"
StrokeWidth="1"
ScatterWidth="15"
ScatterHeight="15"
XBindingPath="YValue1"
YBindingPath="YValue2">
</chart:ScatterSeries>
</chart:SfChart.Series>
</local:ChartExt> |
|
public class ChartExt : SfChart
{
} |
|
public class CustomChartRenderer : SfChartRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Syncfusion.SfChart.XForms.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 Com.Syncfusion.Charts.ChartSeries CreateNativeChartSeries(Syncfusion.SfChart.XForms.ChartSeries formSeries)
{
if (formSeries is Syncfusion.SfChart.XForms.ScatterSeries)
{
return new CustomScatterSeries();
}
return base.CreateNativeChartSeries(formSeries);
}
}
public class CustomScatterSeries : Native.ScatterSeries
{
protected override Native.ChartSegment CreateSegment()
{
return new CustomLineSegment();
}
}
public class CustomLineSegment : Native.ScatterSegment
{
private readonly float width = 5;
Paint paint = new Paint();
public override void OnDraw(Canvas canvas)
{
var w = this.ScatterWidth;
var h = this.ScatterHeight;
paint.StrokeWidth = this.Series.StrokeWidth;
paint.Color = this.Color;
Path path = new Path();
path.MoveTo(this.CenterX - w, this.CenterY);
path.LineTo(this.CenterX - w/4, this.CenterY - h/4);
path.LineTo(this.CenterX, this.CenterY - h);
path.LineTo(this.CenterX + w / 4, this.CenterY - h / 4);
path.LineTo(this.CenterX + w, this.CenterY);
path.LineTo(this.CenterX + w / 4, this.CenterY + h / 4);
path.LineTo(this.CenterX, this.CenterY + h);
path.LineTo(this.CenterX - w / 4, this.CenterY + h / 4);
path.LineTo(this.CenterX - w, this.CenterY);
path.Close();
canvas.DrawPath(path, paint);
}
} |