Actionscript 3 Flex:组件如何知道其某个样式是否已更改?

Actionscript 3 Flex:组件如何知道其某个样式是否已更改?,actionscript-3,apache-flex,flex3,Actionscript 3,Apache Flex,Flex3,我从TextField继承了一个自定义组件。组件需要知道其任何样式在运行时通过setStyle进行更改的时间。我该怎么做?这可能很明显,但我找不到可以覆盖的事件或适当的方法。如果您希望文本字段与Flex中的容器和其他组件配合良好,您可能希望将其包装在UIComponent中,或者让子类实现IUIComponent和IStyleClient或ISimpleStyleClient接口(由UIComponent实现)。如果您这样做,组件将使用Flex样式系统,并且每次样式更改时,都将调用名为style

我从TextField继承了一个自定义组件。组件需要知道其任何样式在运行时通过setStyle进行更改的时间。我该怎么做?这可能很明显,但我找不到可以覆盖的事件或适当的方法。

如果您希望文本字段与Flex中的容器和其他组件配合良好,您可能希望将其包装在
UIComponent
中,或者让子类实现
IUIComponent
IStyleClient
ISimpleStyleClient
接口(由
UIComponent实现)。如果您这样做,组件将使用Flex样式系统,并且每次样式更改时,都将调用名为
styleChanged`的方法:

public function styleChanged(styleProp:String):void
请参见

styleChanged()方法

public function styleChanged(styleProp:String):void
检测样式属性的更改。设置任何样式属性时,Flex都会调用styleChanged()方法,向其传递所设置样式的名称

这是一种高级方法,您可以在创建UIComponent的子类时覆盖它。创建自定义组件时,可以重写styleChanged()方法以检查传递给它的样式名称,并相应地处理更改。这使您可以替代现有样式的默认行为,或添加自己的自定义样式特性

如果处理style属性,则对styleChanged()方法的重写应调用invalidateDisplayList()方法,以使Flex在下一次屏幕更新时执行组件的updateDisplayList()方法


Parameters styleProp:String-样式属性的名称,如果此组件的所有样式都已更改,则为null

啊。是 啊感谢您花时间发布更好的答案+谢谢西奥。好消息!不幸的是,我没有足够的声望点数来投票支持你。rhtx,Theo,谢谢你的意见。我决定将这个设置为正确答案,因为它符合我的预期,尽管西奥在文本字段上的输入非常有价值。“参数styleProp:String-样式属性的名称,如果此组件的所有样式都已更改,则为null。”这解释了为什么我制作的这个组件上styleProp始终为null;)谢谢