【问题标题】:How to use a skin from the main application in Flex?如何在 Flex 的主应用程序中使用皮肤?
【发布时间】:2012-03-03 20:01:46
【问题描述】:

我有一个带有 SWF 加载器的应用程序。
从加载的 SWF 文件中,我使用以下命令从主应用程序访问公共变量:

[Bindable] public var global:Object = FlexGlobals.topLevelApplication;

Alert.show(global.myvar); 

这一切都很完美。


我在主应用程序的“皮肤”目录中有一个 MXML 皮肤文件(用于按钮)。
是否可以在子应用程序中使用此皮肤?


我已经试过了,很遗憾没用:

[Bindable] public var global:Object = FlexGlobals.topLevelApplication;

<s:Button label="My Text" skinClass="{global.skins.menuButtons}" />

还有这个,但是它不能再编译了:

[Bindable] public var global:Object = FlexGlobals.topLevelApplication;

<s:Button label="Button 1" skinClass="global.skins.menuButtons" />
<s:Button label="Button 2" skinClass="FlexGlobals.topLevelApplication.skins.menuButtons" />

是否有可能以另一种方式实现我想要的,或者我必须将皮肤复制到我想使用皮肤的所有项目中?

谢谢。

【问题讨论】:

  • 一个选项可以是制作一个包含所有皮肤类的 swc,并将该 swc 标记为 rsl。这样你就有了 skin.swc、main_app.swf 和 child_app.swf。由于 swc 是 rsl,它不会增加任何 swf 的重量,编译器也会很高兴。否则,您可以通过 getDefinitionByName 从 mainApp 获取皮肤的类实例,并使用该类创建皮肤实例。当然,在这种情况下你不会有任何编译时检查。

标签: actionscript-3 apache-flex flex4 flash-builder flex4.5


【解决方案1】:

我已经解决了这个问题。

在我的主 SWF 文件中,我将一个公共变量定义为类:

public var menuButtons:Class = skins.menuButtons;

在子 SWF 文件中,我用 FlexGlobals.topLevelApplication 引用这个变量:

[Bindable] public var global:Object = FlexGlobals.topLevelApplication;

<s:Button label="My Text" skinClass="{global.menuButtons}" />

显然,用 global.skins.menuButtons 直接引用皮肤是不可能的。

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多