我正在尝试使用FXG图像作为包含标题的按钮的图标。我的FXG文件位于resources / SpeakerIcon.fxg,我的尝试用法在我的mxml文件中如下所示:
<mx:Button id="audioButton" label="Audio"
....
icon="{resources.SpeakerIcon}"/>
当我尝试使用它时,我得到“TypeError:错误#1034:类型强制失败:无法将资源:: SpeakerIcon @ 41fa0e1转换为mx.core.IFlexDisplayObject”。我的研究表明,FXG文件应该是s:图形,它实现了IFlexDisplayObject http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/primitives/Graphic.html。
我错过了什么简单的事情?
答案 0 :(得分:3)
<s:Graphics/>
对象与FXG文档中的<Graphics/>
标记不同。
<s:Graphics/>
是Spark原始形状组件的基类(如<s:Rect/>
)。它们不像FXG同类产品那么轻巧。因此,他们没有实现IFlexDisplayObject
接口(正如@Flextras刚发布的那样:)
在您的Flex代码中,FXG资产可被视为SpriteVisualElement
,这在技术上意味着FXG资产实施IVisualElement
界面。
如果可以,请使用Spark <s:Button/>
类而不是mx。我不认为<mx:Button/>
适用于FXG。
答案 1 :(得分:1)
对于FXG,您应该使用精灵或[在您的情况下]使用SpriteVisualElement。我不相信这些类中的任何一个实现IFlexDisplayObject。
您可以考虑从我的Apache Flex白板中将您的FXG元素包装在此FXGImage类中。 FXGImage扩展了UIcomponent,它是一个IFlexDisplayObject。
以下是source code for the class的直接链接。