В Flex 4, как создать переход для стилизованного свойства?

Я пытаюсь создать скин для Flex 4 Spark Button. Он имеет фоновый прямоугольник, цвет которого контролируется свойством стиля "chromeColor". Если я создаю для него декларацию стиля, которая имеет разное значение цвета для состояний "вверх" и "над", она работает нормально - цвет фона кнопки меняется, когда мышь наведена.

Однако я хотел бы изменить это поведение так, чтобы цвет фона изменялся с переходом, а не сразу, при этом все еще имея возможность определять цвета, которые нужно изменить с и на псевдоселекторы CSS. Поэтому я добавил объявление в определение скина, но оно не работает должным образом.

Это ведет себя так:

  • при переворачивании цвет меняется сразу,
  • если мышь выкатывается до того, как закончится переход при наведении (что на самом деле не произошло) (то есть до того, как пройдет время, установленное в определении анимации), переход сработает, и цвет превратится в оригинал, "вверх" значение
  • если мышь выкатится после этого времени, изменение цвета происходит мгновенно

Вот соответствующие фрагменты кода:

Main.mxml:

<fx:Style>

    .blackSquare {
        skinClass: ClassReference("OverButtonSkin");
        chromeColor: #000000;
    }

    .blackSquare:over {
        chromeColor: #ABCDEF; 
    }

</fx:Style>
<s:Button styleName="blackSquare" />

OverButtonSkin.mxml:

<s:transitions>
    <s:Transition>
        <s:AnimateColor target="{bgFill}" duration="1000" />
    </s:Transition>
</s:transitions>

<s:Rect width="100%" height="100%">
    <s:fill>
        <mx:SolidColor id="bgFill" color="{getStyle('chromeColor')}"/>
    </s:fill>
</s:Rect>

Я делаю что-то не так, или я нашел ошибку? Я использую Flex SDK 4.6.0.

1 ответ

Я не думаю, что псевдоселекторы для состояний являются допустимым Flex CSS (который является только подмножеством стандартного CSS). Что вы можете сделать, это создать свои собственные свойства CSS, например:

s|Button {
    chromeColorUp: red;
    chromeColorOver: green;
    chromeColorDown: blue;
}

Теперь для достижения желаемого эффекта вы можете использовать назначение свойств на основе состояния Flex 4.

<s:Rect left="0" right="0" top="0" bottom="0">
    <s:fill>
        <s:SolidColor id="bgFill"
                      color.up="{getStyle('chromeColorUp')}"
                      color.over="{getStyle('chromeColorOver')}"
                      color.down="{getStyle('chromeColorDown')}" />
    </s:fill>
</s:Rect>

Transition Вы уже определили, теперь будет автоматически воспроизводить цветовой переход между красным, зеленым и синим, когда кнопка меняет свое состояние.

Другие вопросы по тегам