我制作了一个SWC项目(我的新主题),包含以下元素:
我制作了一个SWF项目(Flex应用程序),包含以下元素:
在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>
你能帮帮我吗?
非常感谢
此致
安东尼
答案 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文件中的名字。
这个解决方案并不像在主题中将对象连接到他们的皮肤一样干净,但我认为无论如何都不可能。