PDA

Просмотр полной версии : Flex проектирование Темы


inozemcev
15.06.2010, 16:31
Дано приложение, которое реализовывает GUI интерфейс через css стили, которые грузят ресурсы на этапе компиляции тегом embed

цель сделать возможным поддержку некой темы. Тема подгружает свой набор стилей и компонентов на этапе исполнения и все компоненты описывают свой внешний вид на основании стилей и рендереров описанных в Теме.

Можете дать какой нибудь совет, как это лучше сделать ?!

В частности как динамически создавать css стили для компонентов.
(я конечно буду пользоваться google но мне кажется тема достойна публичного обсуждения)

Хемуль
15.06.2010, 16:34
Может быть это (http://livedocs.adobe.com/flex/3/langref/mx/styles/CSSStyleDeclaration.html)?

inozemcev
15.06.2010, 17:28
Первая попытка добится каких то результатов привела к warning-у


private function createStyle () :void {
var windowBorderSD:CSSStyleDeclaration = new CSSStyleDeclaration ();
windowBorderSD.defaultFactory = function () :void {
left = 5;
right = 15;
top = 10;
bottom = 8;
}
StyleManager.setStyleDeclaration (".windowBorder", windowBorderSD, true);
}

// далее где то в функции которая вызывается после creationComplete
createStyle();
var windowBorder:Canvas = new Canvas ();
windowBorder.styleName = StyleManager.getStyleDeclaration(".windowBorder");



Компилятор выдает следующее:


Warning: 'setStyleDeclaration' has been deprecated since 4.0. Please use 'IStyleManager2.setStyleDeclaration on a style manager instance'.

Как использовать этот интерфейс непонятно класса StyleManager2 не существует
возможно код будет работать c flex_sdk_3 но приложение компилится на 4

Хемуль
15.06.2010, 17:52
IStyleManager2 - это интерфейс, который имплементируется классом StyleManager, как я понимаю.
Вам же так и написали, мол, используйте метод IStyleManager2.setStyleDeclaration для экземпляра style manager'а.
То есть, получаете этот самый экземпляр и вызываете его метод. Думаю, в сети есть примеры того, как это делается.

inozemcev
15.06.2010, 19:51
Интерфейс не умеет по определению ничего делать. Скорее всего речь идет о том, что метод setStyleDeclaration должен выполнять класс или экземпляр класса реализующий этот интерфейс.

Правда я сам допустил неточность вместо
var windowBorderSD:CSSStyleDeclaration = new CSSStyleDeclaration ();
должно быть
var windowBorderSD:CSSStyleDeclaration = new CSSStyleDeclaration (someName);
где someName какой нибудь string

О результатах чуть позже доложу

Хемуль
15.06.2010, 20:11
Скорее всего речь идет о том, что метод setStyleDeclaration должен выполнять класс или экземпляр класса реализующий этот интерфейс.
Ну так вам же так и написали ^_^ :
Please use 'IStyleManager2.setStyleDeclaration on a style manager instance

inozemcev
16.06.2010, 17:52
Что это за класс то ? Пользовательский какой - то. Нужно писать свой собственный syleManager ?

Добавлено через 9 минут

//Flex 3 code
StyleManager.getStyleDeclaration("someStyle");
//Flex 4 code
FlexGlobals.topLevelApplication.styleManager.getStyleDeclaration("someStyle")

Хемуль
16.06.2010, 18:07
2 inozemcev:
Google + документация рулят. ^_^

inozemcev
16.06.2010, 19:39
Информации очень мало по этой теме. В поисковике эта ветка на тему IStyleManager2 уже на 3 или четвертом месте из 6 - 7 возможных.

Хемуль
16.06.2010, 20:12
2 inozemcev:
Да вы по StyleManager ищите, а не по IStyleManager2.