Просмотр полной версии : Flex проектирование Темы
inozemcev
15.06.2010, 16:31
Дано приложение, которое реализовывает GUI интерфейс через css стили, которые грузят ресурсы на этапе компиляции тегом embed
цель сделать возможным поддержку некой темы. Тема подгружает свой набор стилей и компонентов на этапе исполнения и все компоненты описывают свой внешний вид на основании стилей и рендереров описанных в Теме.
Можете дать какой нибудь совет, как это лучше сделать ?!
В частности как динамически создавать css стили для компонентов.
(я конечно буду пользоваться google но мне кажется тема достойна публичного обсуждения)
Может быть это (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
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
О результатах чуть позже доложу
Скорее всего речь идет о том, что метод 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")
2 inozemcev:
Google + документация рулят. ^_^
inozemcev
16.06.2010, 19:39
Информации очень мало по этой теме. В поисковике эта ветка на тему IStyleManager2 уже на 3 или четвертом месте из 6 - 7 возможных.
2 inozemcev:
Да вы по StyleManager ищите, а не по IStyleManager2.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.