在AS3中设置按钮的skinState

时间:2011-12-17 20:56:39

标签: actionscript-3 flex flex4 adobe

我想在ActionScript中设置(手动)按钮(我已设置皮肤)的skinState(例如“禁用”)。

例如: 我有一个带有hostComponent的按钮皮肤:components.backend.btnMenuBakComp 按钮外观具有默认按钮状态(向上,向上,向下,...),但我想在ActionScript中设置其中一个skinStates。

例如:

subMenu.btnDashboard.currentState = "disabled";

这不起作用,因为组件中不知道“禁用”状态(它只在btnDashboard的skinState中知道)。

我该如何解决这个问题? 还有另一个解决方案,然后加载一个新的skinClass?

由于

1 个答案:

答案 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;