Apache flex 有没有办法获取当前应用程序中所有皮肤类的列表?

Apache flex 有没有办法获取当前应用程序中所有皮肤类的列表?,apache-flex,flex4,skinning,flex-spark,Apache Flex,Flex4,Skinning,Flex Spark,有没有办法获取当前应用程序中所有皮肤类的列表?我使用的是Flex4.5.1 这是我现在用来获取所有皮肤的循环 for each (var item:Object in styleManager.typeHierarchyCache) { for (label in item) { if (label=="spark.components.supportClasses.Skin" ||

有没有办法获取当前应用程序中所有皮肤类的列表?我使用的是Flex4.5.1

这是我现在用来获取所有皮肤的循环

            for each (var item:Object in styleManager.typeHierarchyCache) {

                for (label in item) {

                    if (label=="spark.components.supportClasses.Skin" ||
                        label=="spark.skins.mobile.supportClasses.MobileSkin") {

                        for (label in item) {
                            name = label.substr(label.lastIndexOf(".")+1);
                            vo = new SkinObject();
                            vo.name = name;
                            vo.qualifiedName = label;
                            dictionary[label] = vo;
                        }
                        break;
                    }

                }

            }

            for each (item in dictionary) {
                array.push(item);
            }

原因是我想列出应用程序中的所有皮肤,然后能够实时应用它们,以便查看它们的外观。*我有这个功能,但我希望有一个更好的方法。

你肯定可以遍历屏幕上的所有对象,看看它们是否属于SparkSkin类型。大概是这样的:

private function findSkins():void
{
    recurseComponent(FlexGlobals.topLevelApplication);
}

private function recurseComponent(parent:UIComponent):void
{
    var child:UIComponent;
    for(var i:uint = 0, len:uint = parent.numElements; i<len; i++)
    {
        child = parent.getElementAt(i) as UIComponent;
        if(child && child is SparkSkin)
        {
            trace("Skin Found!"); // trace whatever you need here
        }
        recurseComponent(child);
    }
}
私有函数findSkins():void
{
recurseComponent(FlexGlobals.topLevelApplication);
}
私有函数recurseComponent(父级:UIComponent):void
{
var子级:UIComponent;

对于(var i:uint=0,len:uint=parent.numElements;你是说在FlashBuilder中还是在一般情况下?使用AS3;我不知道如何将所有类编译成最终的SWF。即使可以,你如何定义皮肤类和非皮肤类之间的区别。W/4.5.1支持ActionScript皮肤;你不能100%依赖SparkSkin类是所有皮肤的父类。为什么要这样做?@flextras-我也不这么认为。好吧,styleManager在TypeHierarchyCache中包含一个类型列表。该列表中列出了ui组件和皮肤。我可以通过检查基类来筛选该列表以获得皮肤。我将在op中发布一个代码段。如果你符合对于swc,会生成一个catalog.xml文件,其中包含项目中的所有文件名。您可以选择解析该文件吗?@RIAStar-在itRight中没有任何特定于外观的内容。您发布的代码只会遍历显示列表。我发布的代码会获取所有外观。它只是乱七八糟,没有给出我想要的内容在没有很多其他工作的情况下进行搜索。样式管理器不会给你所有的皮肤。只有css中指定的皮肤或已经加载的内联皮肤。内联和未加载的皮肤可能不会显示。同样,我不明白这是为了什么,一开始也不应该这样做。谢谢JAX和所有人.我现在暂缓。