所以我创建了一个自定义切换按钮,以包含属性currentValue:int
这样我就可以做到以下......
<fx:Script>
protected var currentValue:int = 0;
protected function changeValue(x:int):void{
currentValue = x;
}
</fx:Script>
<MyToggleButton currentValue="{updatedValue}" styleName="MyToggleStyle" click="changeValue(1)" id="first"/>
<MyToggleButton currentValue="{updatedValue}" styleName="MyToggleStyle" click="changeValue(2)" id="second"/>
此脚本的想法是根据currentValue的变化更改切换按钮的外观。如何每次都刷新我的切换按钮,以便根据“currentValue”的变化更新样式?
P.S。 MyToggleStyle将引用以mxml编写的Skin类,该类将使用getStyle(“currentValue”)来获取对currentValue的更改
答案 0 :(得分:0)
如果currentValue
属性仅影响皮肤图形,并且您有一些预定义的“外观”,那么您应该创建一个具有状态的外观。 (请参阅spark.skins.spark.CheckBoxSkin
以获得一个好例子。)
在MyToggleButton中:
public function set currentValue(value:int):void {
_currentValue = value;
invalidateSkinState();
}
protected override function getCurrentSkinState():String {
return _currentValue == 9 ? "someStateName" : "otherState";
}
当currentValue
发生变化时,这将使您的皮肤状态无效,Flex会自动调用getCurrentSkinState()
来确定您皮肤的新状态。然后,您可以在皮肤中使用includeIn
,条件属性等来确定其外观。
如果你想在你的皮肤中显示currentValue
作为文本,你应该看看皮肤部分。这些基本上是你的组件定义的插槽,然后皮肤“填充”标签等组件。例如,标准火花按钮上的标签是labelDisplay
皮肤部件。该组件可以直接在其上设置文本,但实际创建它是由皮肤决定的。
P.S。在示例代码中,您还需要[Bindable]
上的currentValue
。