我使用以下代码来获取包含有关应用程序对象的元数据的对象,但它似乎并不是列出样式。
var classinfo:Object = ObjectUtil.getClassInfo(FlexGlobals.topLevelApplication);
有没有办法包含样式?并跟进问题,如果有,有没有办法表明样式是在本地声明还是在基类中继承/声明?
答案 0 :(得分:0)
我认为您可能无法理解样式在Flex中的工作方式。
mxmlc编译器在生成样式代码时会删除[Style]
元数据标记。您可以通过添加-keep-generated-actionscript=true
编译器参数并在输出目录中查找生成的文件夹来验证这一点。 (例如bin-debug)。在那里看一下[YourAppName] -generated.as文件。您将看到它将所有样式元数据转换为actionscript。
以下是一些从styleManager转储所有样式信息的代码。
for each(var selector:String in styleManager.selectors) {
var cssStyle:CSSStyleDeclaration = styleManager.getStyleDeclaration(selector);
var defaultStylesObject:Object = {}
if(cssStyle.defaultFactory != null) {
cssStyle.defaultFactory.apply(defaultStylesObject)
}
for (var defaultProp:String in defaultStylesObject) {
trace(selector + " defaultFactory " + defaultProp + ":" + defaultStylesObject[defaultProp])
}
var stylesObject:Object = {}
if(cssStyle.factory != null) {
cssStyle.factory.apply(stylesObject)
}
for (var prop:String in stylesObject) {
trace(selector + " factory " + prop + ":" + stylesObject[prop])
}
}
如果要查看超类中定义了哪些样式,则必须遍历类层次结构。