我有兴趣找到解决这个问题的最佳方法,但这在技术上并不困难,但必须有一个优雅的解决方案。
基本上我有一个主要包含文本输入的表单,我想根据当前状态更改输入框的样式。
我可以在每个输入的mxml中执行此操作...
<s:TextInput text="label" borderColor.State1="0xFFFFFF" borderColor.State2="0x000000"/>
但这涉及在表单中的每个项目上创建属性。
在不向每个项目添加属性的情况下,必须有更好的方法吗?
谢谢!
答案 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'属性将值设置为您想要的值。