Live Charts使用说明(1) Separator(网格线)对齐

通过Separator.Step可以设置网格线的隔,但网格线总是从轴的MinValue画起。有时,有这种需求,如要,网格线从零开始每限5画一条,而轴的MinValue必须要为-2,这时应该怎么处理呢?

查看了一下源码,找到解决办法,在文件AxisCore.cs中,看一下函数PrepareChart,代码如下:

internal virtual CoreMargin PrepareChart(AxisOrientation source, ChartCore chart)
        {
            if (!(Math.Abs(TopLimit - BotLimit) > S * .01) || !ShowLabels) return new CoreMargin();

            CalculateSeparator(chart, source);

            var f = GetFormatter();

            var currentMargin = new CoreMargin();
            var tolerance = S / 10;

            InitializeGarbageCollector();

            var m = !double.IsNaN(View.BarUnit)
                ? View.BarUnit
                : (!double.IsNaN(View.Unit)
                    ? View.Unit
                    : Magnitude);

            var u = !double.IsNaN(View.BarUnit)
                ? View.BarUnit
                : (!double.IsNaN(View.Unit)
                    ? View.Unit
                    : 1);

            if (TopLimit <= 0 && BotLimit < 0)
            {
                var l = TopLimit - (EvaluatesUnitWidth ? u : 0);
                LastSeparator = l;
                for (var i = l; i >= Math.Truncate(BotLimit / m) * m; i -= S)
                {
                    FirstSeparator = i;
                    DrawSeparator(i, tolerance, currentMargin, f, source);
                }
            }
            else
            {
                var l = Math.Truncate(BotLimit / m) * m;
                FirstSeparator = l;
                for (var i = l; i <= TopLimit - (EvaluatesUnitWidth ? u : 0); i += S)
                {
                     LastSeparator = i;
                    DrawSeparator(i, tolerance, currentMargin, f, source);
                }
            }

            return currentMargin;
        }

分析红色部分代码可知,我们可以设置轴的Unit来解决此问题。如,我们可以如下设置Y轴

<lvc:CartesianChart.AxisY>
                <lvc:Axis IsMerged="False"  Foreground="Red" Unit="5" BarUnit="5"  MinValue="-2"                         MaxValue="22">
                    <lvc:Axis.Separator>
                        <lvc:Separator StrokeThickness="1.5" Step="5" StrokeDashArray="4">
                            <lvc:Separator.Stroke>
                                <SolidColorBrush Color="#404F56" />
                            </lvc:Separator.Stroke>
                        </lvc:Separator>
                    </lvc:Axis.Separator>
                </lvc:Axis>
            </lvc:CartesianChart.AxisY>

效果如下:

 记录一下解决问题的过程,希望对大家有所帮助,继续搬砖!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值