Flex 4中LineSeries的两个Bug

Flex 4中LineSeries有两个Bug,使用SolidColorStroke自定义lineStroke后,DataTip无边框,Legend marker(图例标记)的填充色为始终为黑色。点击此处查看这两个Bug,下面我们将讲解造成这两个Bug的原因及解决方案。

打开Flex 4 SDK中的LineSeries.as,DataTip的边框是在findDataPoints方法中设置的,定位到1543行:if (istroke is Stroke),在Flex 4中Stroke是SolidColorStroke的子类,因此这个代码块中是不会执行的。那为什么图例标记的填充色为始终为黑色呢?Legend使用Chart中各个Series的legendData作为默认数据提供者。定位到get legendData()方法,可以看出,图例以LineSeriesLegendMarker实例作为默认标记,LineSeriesLegendMarker辅助类,按F3打开代码定义,定位到2101行:if (Stroke is Stroke)。问题就出在这个代码块中,我想肯定是Flex 4 SDK开发工程师太赶工了。

明白了原因,具体怎么改就不难了,请参看源码中我扩展LineSeries的子类LineSeriesEx。

注意:如果是升级造成Bug,在Flash Builder中Debug的一个快捷方法就是:Copy源码,然后直接定位到时警告处。

当然,如果我们仍使用Stroke来自定义lineStroke,就不存在上述两个Bug。不过,既然建议在Flex 4 中使用SolidColorStroke来代替Stroke,Adobe最好能在下一个版本中修正这两个Bug,Flex Hero中已经修正了这个Bug。

点击此处查看该实例最终效果,点击此处下载该实例的源码。

发表评论