如何使用FXG作为mx:按钮图标

时间:2012-08-17 01:05:11

标签: flex mxml

我正在尝试使用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

我错过了什么简单的事情?

2 个答案:

答案 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的直接链接。