0

我希望这很容易,但很多谷歌搜索和检查断点上的对象并没有找到答案。

我可以在 MXML 中定义状态:

<s:states>      
    <s:State name="state_1" />      
    <s:State name="state_2" />      
</s:states>

然后我可以这样做:

<s:Label id="lblTest" text="Hello" x.state_1="20"  x.state_2="100" />

在 Actionscript 中,我可以设置属性值:

lblTest.x = 150;

问题:无论当前状态如何,如何从 Actionscript 为 lblTest 设置 x.state_1 和 x.state_2?

4

1 回答 1

3

在 Actionscript 中工作时,没有什么比这更简单了。当您使用特定于状态的属性编译 mxml 文件时,会在其构造函数中生成类似这样的 Actionscript 代码:

states = [
  new State ({
    name: "state_1",
    overrides: [
      new mx.states.SetProperty().initializeFromObject({
        target: "lblTest",
        name: "x",
        value: 20
      })
    ]
  })
  ,
  new State ({
    name: "state_2",
    overrides: [
      new mx.states.SetProperty().initializeFromObject({
        target: "lblTest",
        name: "x",
        value: 100
      })
    ]
  })
];

如果你在 Actionscript 中创建你的状态,你可以做类似的事情。如果您想修改已设置的特定于状态的属性,则不是那么容易。您必须SetProperty在每个状态的overrides数组中找到对象并替换/修改它。

实际上,特定于状态的属性的强大之处在于能够在 MXML 中很好地定义它们。不要忘记您可以使用绑定来设置属性的值,以基本上免费获得您想要的:

<s:Label id="lblTest" text="Hello" x.state_1="{state_1_value}"  x.state_2="100" />
于 2013-07-28T11:35:11.613 回答