我知道您可以使用CSS来使用StyleManager在Flex中设置对象样式:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_07.html
您还可以动态加载已编译的 CSS文件(SWF):
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_10.html
但是,我正在使用Web GUI和服务器端脚本动态创建CSS文件。 如果更改了CSS,那么脚本还需要将CSS编译为SWF(这不是一个可行的选项)。有没有办法解决这个问题?
答案 0 :(得分:3)
在this comment中,在Adobe错误跟踪器 T中与此相关的问题。 Busser 正在为您描述可行的解决方案:
“我已经创建了一个小类,它将'解析'用CSS读取的CSS文件 HTTPService对象。它拆开了 由...返回的字符串 HTTPService对象,将其分解为 选择器,并创建一个新的 每个CSSStyleDeclaration对象 找到的选择器。一切都结束了 属性被分配给 它添加了CSSStyleDeclaration对象 到StyleManager。它没有 执行任何检查,你应该做 确保CSS文件格式正确,但是 99%的时间都足够了。 像@font,Embed()和 很难使用ClassReference() 由我的客户。他们确实需要 能够改变颜色和东西 像那样他们可以轻松地主题化 灵活应用到他们家 式“。
您可以尝试联系此人以寻求他们的解决方案,也可以使用this as3csslib project中的代码作为编写类似于他们所描述的内容的基础。
答案 1 :(得分:2)
您也可以像这样在flex中实现动态样式表。在这里我发现了这篇文章: http://askmeflash.com/article_m.php?p=article&id=6
答案 2 :(得分:2)
编辑:此解决方案不起作用。从解析器中取出的所有选择器都将转换为小写。这可能对您的应用程序有效,但可能不会......
我在这里留下这个答案,因为它可以帮助一些人寻找解决方案,并警告其他人这种方法的局限性。
请参阅我的问题:“Looking for CSS parser written in AS3”进行完整的讨论,但我发现隐藏在标准库中的CSS解析器。以下是如何使用它:
public function extractFromStyleSheet(css:String):void {
// Create a StyleSheet Object
var styleSheet:StyleSheet = new StyleSheet();
styleSheet.parseCSS(css);
// Iterate through the selector objects
var selectorNames:Array = styleSheet.styleNames;
for(var i:int=0; i<selectorNames.length; i++){
// Do something with each selector
trace("Selector: "+selelectorNames[i];
var properties:Object = styleSheet.getStyle(selectorNames[i]);
for (var property:String in properties){
// Do something with each property in the selector
trace("\t"+property+" -> "+properties[property]+"\n");
}
}
}
然后您可以使用以下方式应用样式:
cssStyle = new CSSStyleDeclaration();
cssStyle.setStyle("color", "<valid color>);
FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration("Button", cssStyle, true);
答案 3 :(得分:0)
在Flex中,CSS的应用程序在编译时在服务器端处理,而不是在运行时在客户端处理。
我会为你看到两个选项(我不确定它们有多实用):