Flex 4 изменение параметров стиля с помощью состояний

#apache-flex #flex4

#apache-flex #flex4

Вопрос:

Мне интересно найти наилучший подход к этой проблеме, технически это не сложно, но должно быть элегантное решение.

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

Я могу сделать это в mxml для каждого ввода…

 <s:TextInput text="label" borderColor.State1="0xFFFFFF" borderColor.State2="0x000000"/>
  

Но это включает в себя создание свойств для каждого отдельного элемента в форме.

Должен быть лучший способ сделать это без добавления свойства к каждому элементу?

Спасибо!

Комментарии:

1. Вы можете зациклить дочерние элементы формы и применить стиль

Ответ №1:

Вы можете использовать transitions и setAction для одновременной установки стилей для нескольких объектов на основе нового viewstate. Это фрагмент примера из документации SDK: .

 <s:states>
        <s:State name="Login" />
        <s:State name="Register" />
    </s:states>

    <s:transitions>
        <!-- Define the transition from the base state to the Register state.-->
        <s:Transition id="toRegister" fromState="*" toState="Register">
            <s:Sequence targets="{[loginPanel, registerLink, confirm, loginLink]}">
                <s:RemoveAction />
                <s:Fade />
                <s:SetAction target="{loginPanel}" property="title" />
                <s:SetAction target="{loginButton}" property="label" />
                <s:SetAction target="{loginButton}" property="color" />
                <s:Resize target="{loginPanel}"/>
                <s:AddAction />
                <s:Fade />
            </s:Sequence>
        </s:Transition>

        <!-- Define the transition from the Register state to the base state.-->
        <s:Transition id="toDefault" fromState="Register" toState="*">
            <s:Sequence targets="{[loginPanel, registerLink, 
                    confirm, loginLink]}">
                <s:RemoveAction/>
                <s:SetAction target="{loginPanel}" property="title"/>
                <s:SetAction  target="{loginButton}" property="label"/>
                <s:SetAction target="{loginButton}" property="color"/>
                <s:Resize target="{loginPanel}"/>
                <s:AddAction/>
            </s:Sequence>
        </s:Transition>
    </s:transitions>
  

Вы можете просто настроить таргетинг на все в последовательности (вместо этого используя разные таргеты для каждого setAction) и использовать свойство ‘value’ setAction, чтобы установить нужные значения.

Комментарии:

1. Отлично, спасибо, у меня уже есть переход между двумя состояниями, так что это отличное простое решение.