Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Установка стилей в компоненте в зависимости от состояния (http://www.flasher.ru/forum/showthread.php?t=203063)

okouser 28.08.2013 17:41

Установка стилей в компоненте в зависимости от состояния
 
empty

Inet_PC 31.08.2013 20:28

Вот этот код:
Код AS3:

color.normalStates="0x000000"

не создает какого-то особого стиля, а генерируется код наподобие этого:
Код AS3:

new State ({
  name: "normalStates",
  overrides: [
      new SetStyle().initializeFromObject({
        target: "component",
        name: "color",
        value: 0x000000})
        //, ...
  ]
})

Внутри SetStyle при переходе в состояние normalStates запоминается предыдущее значение стиля (в данном случае color) и выставляется новое 0x000000. При выходе из состояния normalStates восстанавливается предыдущее состояние. Таким образом вот так написать можно:
Код AS3:

component.setStyle("color.normalStates", 0xFFFFFF)

, но работать это естественно не будет. В принципе Вы можете написать код наподобие этого:
Код AS3:

var style:SetStyle = getSetStyle("normalStates");
style.value = 0x00FF00;

Или типа такого:
Код AS3:

component.addEventListener(FlexEvent.STATE_CHANGE_COMPLETE, onStateChanged);
private function onStateChanged(e:FlexEvent):void
{
  if (...)
  {
      component.setStyle("color", 0xFF0000);
  }
}

Ну можно и еще придумать варианты. Но как мне кажется это все не true way.
Возможно Вам подойдут pseudo selectors
Изменить стиль программно можно как-то так:
Код AS3:

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace local "*";
 
local|Component:normalStates
{
        color:#FF0000;
}
 
/* end CSS file */
 
var style:CSSStyleDeclaration =
component.styleManager.getStyleDeclaration("TestComponent:normalStates")
if (style)
{
  style.setStyle("color", 0x00FF00);
}

Скорее всего есть еще варианты.

Inet_PC 31.08.2013 22:14

Цитата:

А что это за метод такой: getSetStyle?
Ну что-то типо этого:
Код AS3:

private function getSetStyle(stateName:String, styleProp:String):SetStyle
{
        var numStates:int = states.length;
        for (var i:int=0;i<numStates;++i)
        {
                var state:State = states[i] as State;
                if (state && state.name === stateName)
                {
                        var overrides:Array = state.overrides;
                        var numOverrides:int = overrides.length;
                        for (var j:int=0;j<numOverrides;++j)
                        {
                                var setStyle:SetStyle = overrides[j] as SetStyle;
                                if (setStyle && setStyle.name === styleProp)
                                {
                                        return setStyle;
                                }
                        }
 
                        break;
                }
        }
        return null;
}



Часовой пояс GMT +4, время: 17:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.