我想在ActionScript中设置(手动)按钮(我已设置皮肤)的skinState(例如“禁用”)。
例如: 我有一个带有hostComponent的按钮皮肤:components.backend.btnMenuBakComp 按钮外观具有默认按钮状态(向上,向上,向下,...),但我想在ActionScript中设置其中一个skinStates。
例如:
subMenu.btnDashboard.currentState = "disabled";
这不起作用,因为组件中不知道“禁用”状态(它只在btnDashboard的skinState中知道)。
我该如何解决这个问题? 还有另一个解决方案,然后加载一个新的skinClass?
由于
答案 0 :(得分:2)
又快又脏
您可以访问任何组件的外观并直接设置其状态:
subMenu.btnDashboard.skin.currentState = "disabled";
然而,这不是一个非常干净的方法。您正在告诉Skin类直接做什么并完全绕过主机组件。因此,主机组件不知道对其皮肤所做的更改。
正确的方法
更简洁的方法是在主机组件上公开属性,然后通过覆盖getCurrentSkinState()
方法告诉皮肤自行调整以适应可能的更改。
您可以创建一个“启用”属性,然后在设置“enabled”时通过调用invalidateSkinState()
告诉皮肤更新其状态。
public function set enabled(value:Boolean):void {
_enabled = value;
invalidateSkinState();
}
调用invalidateSkinState()
将在下一个渲染周期中调用外观getCurrentSkinState()
。这个方法看起来像这样:
override protected function getCurrentSkinState():String {
return _enabled ? "normal" : "disabled";
}
请注意,由于您正在为Button(或其子类)设置外观,因此我在此处编写的所有内容都已添加到该组件中。因此,您的问题的答案可能很简单:“只需将'enabled'属性设置为true
。
subMenu.btnDashboard.enabled = true;