使用Flex4,如何制作我的外部主题,如何使用它?

时间:2011-03-18 13:19:34

标签: css flex flex4 themes

我制作了一个SWC项目(我的新主题),包含以下元素:

  • SRC /视图/ MyViewSkin.mxml
  • 的src / DefaultTheme.css

我制作了一个SWF项目(Flex应用程序),包含以下元素:

  • SRC /视图/ MyView.as
  • theme / DefaultTheme.swc //主题构建结果

在SWF项目中,我在mxmlc编译器中添加了这些信息:-theme theme / DefaultTheme.swc。

我的问题是:如何使用 HostComponent [xx] 构建SWC项目(主题)是外部的?

MyViewSkin:

<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- host component -->
<fx:Metadata>
    [HostComponent("view.MyView")] !!!!! This type is unknown by the compiler !!!!
</fx:Metadata>

<s:Label id="myLabel" fontSize="18" fontWeight="bold" color="#FF0000"/>

</s:Skin>

你能帮帮我吗?

非常感谢

此致

安东尼

1 个答案:

答案 0 :(得分:0)

以下是我如何解决它。

所以我有我的主题:

SkinForX.mxml

然后我有我的应用程序:

App.mxml
defaults.css
view
    ComponentX.mxml

在我的SkinForX.mxml中,我的HostComponent不是ACTUAL组件,而是它所基于的Spark组件,在我的例子中是SkinnableComponent:

<fx:Metadata>
    [HostComponent("spark.components.supportClasses.SkinnableComponent")]
</fx:Metadata>

然后我按照惯例制作皮肤,无论我想要什么样的风格和效果。

在我的App.mxml中,我可以包含css文件,但由于它名为defaults.css,我不必(自动插入)。在defaults.css中,我将主题的皮肤附加到ComponentX:

@namespace view "view.*";

view|ComponentX
{
    skin-class:ClassReference("SkinForX");
}

要确保主题皮肤与您使用ComponentX所需的任何内容兼容,可以使用SkinPart表示法指定某些类型化元素必须位于皮肤中。例如:

[SkinPart(required="true")]
public var input:Label;

就是这样。只要主题的皮肤名称相同,您仍然可以换出主题。否则你必须换掉CSS文件中的名字。

这个解决方案并不像在主题中将对象连接到他们的皮肤一样干净,但我认为无论如何都不可能。