Flex 4使用状态更改样式选项

时间:2011-04-05 10:09:27

标签: flex flex4

我有兴趣找到解决这个问题的最佳方法,但这在技术上并不困难,但必须有一个优雅的解决方案。

基本上我有一个主要包含文本输入的表单,我想根据当前状态更改输入框的样式。

我可以在每个输入的mxml中执行此操作...

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

但这涉及在表单中的每个项目上创建属性。

在不向每个项目添加属性的情况下,必须有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用过渡和SetAction基于新的视图状态同时在多个对象上设置样式。这是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使用不同的目标),并使用SetAction的'value'属性将值设置为您想要的值。