6

我知道您可以应用 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(这不是一个可行的选项)。有没有办法解决?

4

4 回答 4

3

在对 Adob​​e 错误跟踪器中与此相关的问题的评论中, T. Busser描述了对您来说可能是一个可行的解决方案:

“我创建了一个小类,它将‘解析’一个使用 HTTPService 对象读取的 CSS 文件。它分解 HTTPService 对象返回的字符串,将其分解为选择器,并为每个选择器创建一个新的 CSSStyleDeclaration 对象找到了。一旦将所有属性分配给 CSSStyleDeclaration 对象,它就会添加到 StyleManager。它不执行任何检查,您应该确保 CSS 文件格式正确,但在 99% 的情况下就足够了。我的客户几乎不会使用 @font、Embed() 和 ClassReference() 之类的东西。他们确实需要能够更改颜色和类似的东西,以便他们可以轻松地将 Flex 应用程序主题化为他们的房屋风格。

您可以尝试与此人联系以获取他们的解决方案,也可以使用此 as3csslib 项目中的代码作为编写类似他们所描述内容的基础。

于 2008-10-15T15:19:47.953 回答
2

你也可以像这样在 flex 中实现动态样式表。在这里我找到了这篇文章: http ://askmeflash.com/article_m.php?p=article&id=6

于 2009-04-01T09:38:50.583 回答
2

编辑:此解决方案不起作用。从解析器中取出的所有选择器都转换为小写。这可能适用于您的应用程序,但它可能不会...

我将这个答案留在这里,因为它可能会帮助一些人寻找解决方案,并警告其他人这种方法的局限性。


请参阅我的问题:“寻找用 AS3 编写的 CSS 解析器”以获得完整的讨论,但我发现隐藏在标准库中的 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);
于 2011-09-23T20:42:54.290 回答
0

Flex 中的 CSS 应用程序在编译时在服务器端处理,而不是在运行时在客户端处理。

然后我会为您看到两个选项(我不确定两者的实用性):

  1. 使用服务器端脚本将 CSS 编译为 SWF,然后动态加载它们。
  2. 解析 CSS 样式表并使用 flex 中的 setStyle 函数来应用样式。与此方法类似的示例是Flex Style Explorer,您可以在其中查看源代码

祝你好运。

于 2008-10-15T14:48:12.977 回答