有時候Layout時只是想用到border或是只想要用到BackgroundColor的時候可以考慮在Group中使用Rect,並加上Style Medatata就可以達到而不用使用到SkinnableContner或是BorderContainer,用法如下。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600"
xmlns:itemrenderers="itemrenderers.*"
>
<fx:Style source="css/Test.css"/>
<s:HGroup paddingTop="5" paddingBottom="5" paddingLeft="5" paddingRight="5">
<itemrenderers:Rect_Style_BackgroundColor width="200" height="200"/>
<itemrenderers:Rect_Style_Border width="200" height="200"/>
</s:HGroup>
</s:Application>
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
>
<fx:Metadata>
[Style(name="backgroundColors", inherit="no", type="uint" , theme="spark")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
override public function styleChanged(styleProp:String):void
{
super.styleChanged(styleProp);
if(styleProp == "backgroundColors")
{
invalidateDisplayList();
}
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
myBackgroundColor.color = getStyle("backgroundColors");
}
]]>
</fx:Script>
<s:Rect left="0" right="0" top="0" bottom="0">
<s:fill>
<s:SolidColor id="myBackgroundColor" color="0x00ff00"/>
</s:fill>
</s:Rect>
</s:Group>
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="100%"
>
<fx:Metadata>
[Style(name="borders", inherit="no", type="uint")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
override public function styleChanged(styleProp:String):void
{
super.styleChanged(styleProp);
if(styleProp == "borders")
{
invalidateDisplayList();
}
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
myBorder.color = getStyle("borders");
}
]]>
</fx:Script>
<s:Rect
left="0" right="0" top="0" bottom="0"
radiusX="5" radiusY="5">
<s:stroke>
<s:SolidColorStroke id="myBorder" weight="2" color="0x00ff00"/>
</s:stroke>
</s:Rect>
</s:Group>
/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace itemrenderers "itemrenderers.*";
@namespace spark "spark.skins.spark.*";
itemrenderers|Rect_Style_BackgroundColor
{
backgroundColors:#f63b5e;
}
itemrenderers|Rect_Style_Border
{
borders:#3e95ef;
}
沒有留言:
張貼留言