2008-10-15 70 views
6

我知道,你可以爲了使用的StyleManager應用CSS樣式的對象在Flex中:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_07.html如何動態地將CSS文件加載到Flex應用程序中?

您也可以加載編譯 CSS文件(主權財富基金)動態:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_10.html

然而,我使用Web GUI和服務器端腳本動態創建我的CSS文件。 如果更改了CSS,那麼該腳本還需要將CSS編譯爲SWF(這不是可行的選項)。有沒有辦法解決?

回答

0

CSS在Flex中的應用在編譯時在服務器端處理,而在運行時不在客戶端處理。

我會看到兩個選項,然後爲你(我不知道如何實踐要麼是):

  1. 使用服務器端腳本來編譯你的CSS爲SWF然後動態加載它們。
  2. 解析CSS樣式表並在flex中使用setStyle函數來應用樣式。此方法的一個類似示例是Flex Style Explorer,您可以在這裏查看source

祝你好運。

3

this comment以在Adobe bug跟蹤T.布瑟被描述什麼可能是你一個可行的解決方案與此相關的一個問題:

「我創建了一個小型的類,將「解析」與讀取CSS文件中的 HTTPService對象。這需要開一個由 HTTPService對象返回的 字符串,把它分成 選擇,併爲找到的每個 選擇一個新的 CSSStyleDeclaration對象。一旦所有t他將 屬性分配給 CSSStyleDeclaration對象,它將 添加到StyleManager中。它不會 執行任何檢查,你應該使 確定CSS文件格式正確,但 它將足夠99%的時間。 像@font,Embed()和 這樣的東西ClassReference()幾乎不會被我的客戶使用 。他們確實需要改變顏色和材料 這樣的 能力,使他們能夠輕鬆地主題 Flex應用程序到他們家 的風格。」

你既可以嘗試與這個人聯繫了他們的解決方案或替代地。也許用代碼this as3csslib project,以此爲基礎寫的東西像他們描述什麼

2

您也可以在這樣的柔性實現動態樣式表,在這裏,我發現這篇文章: http://askmeflash.com/article_m.php?p=article&id=6

+1

這個工作很適合我 - 而不是使用parseCSS我結束瞭解析字符串自己並設置每個屬性使用:StyleManager.getStyleDeclaration(「Component」)。setStyle(「property」,value); 一種黑客,但哦... – onekidney 2009-04-06 18:22:40

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); 
+0

你爲什麼張貼在一個年齡超過2年的回答問題? – 2011-09-23 20:45:16

相關問題