我正在尝试为Flex 4 Spark Button创建一个皮肤。它有一个背景矩形,其颜色由“chromeColor”样式属性控制。如果我为它创建了一个样式声明,它具有不同的颜色值,可用于向上和向上状态,它可以正常工作 - 当鼠标结束时,按钮的背景颜色会发生变化。
但是,我想改变这种行为,以便背景颜色随着转换而不是立即改变,同时仍然能够定义要与CSS伪选择器进行更改的颜色。所以我在皮肤定义中添加了声明,但是效果不好。
表现如下:
以下是相关的代码片段:
<fx:Style>
.blackSquare {
skinClass: ClassReference("OverButtonSkin");
chromeColor: #000000;
}
.blackSquare:over {
chromeColor: #ABCDEF;
}
</fx:Style>
<s:Button styleName="blackSquare" />
<s:transitions>
<s:Transition>
<s:AnimateColor target="{bgFill}" duration="1000" />
</s:Transition>
</s:transitions>
<s:Rect width="100%" height="100%">
<s:fill>
<mx:SolidColor id="bgFill" color="{getStyle('chromeColor')}"/>
</s:fill>
</s:Rect>
我做错了什么,或者我发现了一个错误? 我正在使用Flex SDK 4.6.0。
答案 0 :(得分:0)
我认为状态的伪选择器不是有效的Flex CSS(它只是标准CSS的一个子集)。你可以做的是创建自己的CSS属性,如下所示:
s|Button {
chromeColorUp: red;
chromeColorOver: green;
chromeColorDown: blue;
}
现在,您可以使用基于Flex 4状态的属性分配来实现所需的效果。
<s:Rect left="0" right="0" top="0" bottom="0">
<s:fill>
<s:SolidColor id="bgFill"
color.up="{getStyle('chromeColorUp')}"
color.over="{getStyle('chromeColorOver')}"
color.down="{getStyle('chromeColorDown')}" />
</s:fill>
</s:Rect>
当Button更改其状态时,您已定义的Transition
现在将自动播放红色,绿色和蓝色之间的颜色过渡。