Я знаю, что вы можете применять CSS для стилизации объектов во Flex с помощью StyleManager:
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
Однако я динамически создаю свои файлы CSS, используя веб-интерфейс и серверный скрипт. Если CSS изменен, скрипту также необходимо будет скомпилировать CSS в SWF (что не является жизнеспособным вариантом). Есть ли способ обойти это?






Применение CSS в Flex обрабатывается на стороне сервера при компиляции, а не на стороне клиента во время выполнения.
Тогда я бы увидел для вас два варианта (я не уверен, насколько они практичны):
Удачи.
В этот комментарий к проблеме, связанной с этим в системе отслеживания ошибок Adobe, Т. Бассер описывает, какое решение может быть для вас жизнеспособным:
"I've created a small class that will 'parse' a CSS file read with an HTTPService object. It takes apart the string that is returned by the HTTPService object, break it down into selectors, and create a new CSSStyleDeclaration object for each selector that is found. Once all the properties are assigned to the CSSStyleDeclaration object it's added to the StyleManager. It doesn't perform any checks, you should make sure the CSS file is well formed, but it will be sufficient 99% of the time. Stuff like @font, Embed() and ClassReference() will hardly be used by my customers. They do need the ability to change colors and stuff like that so they can easily theme the Flex application to their house style."
Вы можете либо попытаться связаться с этим человеком для его решения, либо, в качестве альтернативы, возможно, использовать код из этот проект as3csslib в качестве основы для написания чего-то вроде того, что они описывают.
Вы также можете реализовать динамическую таблицу стилей в Flex следующим образом. Здесь я нашел эту статью: http://askmeflash.com/article_m.php?p=article&id=6
Обновлено: это решение не работает. Все селекторы, взятые из парсера, переводятся в нижний регистр. Это может сработать для вашего приложения, но, вероятно, не будет ...
Я оставляю этот ответ здесь, потому что он может помочь некоторым людям, ищущим решение, и предупредить других об ограничениях этого метода.
См. Мой вопрос: «Ищу парсер CSS, написанный на 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);
Почему вы публикуете ответ на вопрос, возраст которого превышает 2 года?
@Rob Я нашел этот вопрос, выполнив поиск в Google, и подумал, что ответ был неполным. Мой ответ завершает вопрос и будет полезен для людей, нашедших вопрос (как и я) в Google.
Это сработало для меня - вместо использования parseCSS я сам проанализировал строку и установил каждое свойство с помощью: StyleManager.getStyleDeclaration ("Component"). SetStyle ("property", value); Что-то вроде взлома, ну да ладно ...