Установка skinState кнопки в AS3 - PullRequest
0 голосов
/ 18 декабря 2011

Я хочу установить (вручную) skinState (например, «отключенный») кнопки (которую я обложил) в ActionScript.

Например: У меня есть скин кнопки с hostComponent: components.backend.btnMenuBakComp Скин кнопки имеет стандартные состояния кнопок (вверх, над, вниз, ...), но я хочу установить один из этих скинов в ActionScript.

Например:

subMenu.btnDashboard.currentState = "disabled";

Это не работает, потому что состояние «отключено» неизвестно в компоненте (оно известно только в skinState btnDashboard).

Как я могу это исправить? Есть ли другое решение, а затем загрузить новый skinClass?

Спасибо

1 Ответ

2 голосов
/ 19 декабря 2011

Быстро и грязно

Вы можете получить доступ к обложке любого компонента и просто установить его состояние напрямую:

subMenu.btnDashboard.skin.currentState = "disabled";

Это, однако, не очень чистый способ сделать это. Вы прямо указываете классу Skin, что делать, и полностью обходите компонент хоста. Следовательно, хост-компонент не имеет представления об изменениях, которые были внесены в его скин.

Правильный путь

Более чистый способ решения этой проблемы состоит в том, чтобы предоставить свойство хост-компоненту, а затем указать оболочке настроить себя на возможные изменения, переопределив метод getCurrentSkinState().

Например, вы можете создать свойство 'enabled', а затем указать оболочке обновить его состояние, вызывая invalidateSkinState() всякий раз, когда устанавливается 'enabled'.

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;
...