我有类似的问题,但更确切地说,我想完全避免了编译,因为我的应用程序是ActiveX包装由一个自定义的EXE文件用,我让软件分销商来定制自己的皮肤。
实际上我们把< fx:Style >放在应用程序之外。为了避免我们已经转换为XML样式表中的字符串低水平解析:
<styles>
<namespace name="myNs" value="com.myComponent">
<declaration selector="myNS|Button#myselector:over #mysubselector">
color:#ffffff;
font-size:bold
</declaration>
... other styles
</styles>
除了关于让用户知道你的组件,你可以加载XML,并创建一个CSSStydeclaration的安全考虑。
只拆分和解析选择器让您创建一系列CSSCondition和CSSSelector添加到您的CSSStyleDeclaration。为了解析选择器,我们使用一个搜索“#”,“:”和“。”的小循环。并分割字符串以保持找到的CSS条件的顺序。
var selectors:Array = [];
// first selector
var conditions:Array = [
new CSSCondition(CSSConditionKind.ID, 'myselector');
new CSSCondition(CSSConditionKind.PSEUDO, 'over');
];
// here you have to find and expand the namespace
ancestor:CSSSelector = new CSSSelector('com.myComponent.Button', conditions);
selectors.push(selector);
// second selector
var conditions:Array = [
new CSSCondition(CSSConditionKind.ID, 'mysubselector');
];
selector:CSSSelector = new CSSSelector('', conditions, ancestor);
selectors.push(selector);
// Empty style declaration
new CSSStyleDeclaration(selectors, styleManager, false);
然后,你可以通过创建@sixtyfootersdude功能解析由parseCSS()CSS属性,但使用的是假选择:
var myCSS:String = "#fake " + "{" + cssTextReadedFromXML + "}";
var style:StyleSheet = new StyleSheet();
sheet.parseCSS(myCSS);
// here you have your parsed properties
var list:Object = sheet.getStyle('#fake');
然后你可以将属性添加到的CSSStyleDeclaration,并将其应用通过setStyle方法并在你的例子中应用声明。
更少或更多是我试图解决这个问题。
请参阅:http://stackoverflow.com/questions/204924/how-do-you-dynamically-load-a-css-file-into-a-flex-application –
@托德:我已经引用该链接我的问题(第一个链接)。这个问题涉及另一个问题。我的问题更具体。 – sixtyfootersdude