今天,用Flash Builder 4基于Flex SDK 4新建了一个Chart应用,结果将Chart组件所在MXML文件切换到设计模式时出错:设计模式:布置组件时出错。请选择“设计”>“刷新”以刷新设计模式。
刷新了N次还是出现那个错误。逐个移除组件进行测试,最终是发现罪魁在于Chart组件,这是因为Chart组件自定义了GridLines,如下所示:
<?xml version="1.0" encoding="utf-8"?> <mx:GridLines xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flash/spark" xmlns:mx="library://ns.adobe.com/flash/mx" gridDirection="both" horizontalStroke="{scs}" verticalStroke="{scs}"> <fx:Declarations> <s:SolidColorStroke id="scs" color="0xCCCCCC"/> </fx:Declarations> </mx:GridLines>
乍看是没有任何问题的,怎么切换到设计模式就出错了呢?我想还是SolidColorStroke的问题,自从Flex 4用SolidColorStroke代替类Stroke类以来,这个类就存在不少Bug,见http://www.riafan.com/flash/flex4-lineseries-two-bugs。
不过,如果我们用元素标签而不是属性标签来定义线条样式,就不存在这个Bug。如下代码:
<?xml version="1.0" encoding="utf-8"?> <mx:GridLines xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flash/spark" xmlns:mx="library://ns.adobe.com/flash/mx" gridDirection="both"> <mx:horizontalStroke> <s:SolidColorStroke color="0xCCCCCC"/> </mx:horizontalStroke> <mx:verticalStroke> <s:SolidColorStroke color="0xCCCCCC"/> </mx:verticalStroke> </mx:GridLines>
个人觉得属性定义还是方便得多,欣喜的是,Flash Builder Burrito已经修正了这个Bug。