С Flex4, как сделать мою внешнюю тему, как ее использовать? - PullRequest
0 голосов
/ 18 марта 2011

Я сделал проект SWC (моя новая тема), с этими элементами:

  • src / views / MyViewSkin.mxml
  • src / DefaultTheme.css

Я создал проект SWF (приложение Flex) со следующими элементами:

  • src / views / MyView.as
  • theme / DefaultTheme.swc // результат построения темы

В проекте SWF я добавил эту информацию в компилятор mxmlc: -theme theme / DefaultTheme.swc.

Моя проблема: как создать SWC-проект (тему) с помощью HostComponent [xx] является внешним?

MyViewSkin:

<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- host component -->
<fx:Metadata>
    [HostComponent("view.MyView")] !!!!! This type is unknown by the compiler !!!!
</fx:Metadata>

<s:Label id="myLabel" fontSize="18" fontWeight="bold" color="#FF0000"/>

</s:Skin>

Не могли бы вы мне помочь?

Большое спасибо

С уважением

Энтони

1 Ответ

0 голосов
/ 24 ноября 2011

Вот как я это решил.

Итак, у меня есть тема:

SkinForX.mxml

А потом у меня есть приложение:

App.mxml
defaults.css
view
    ComponentX.mxml

В моем SkinForX.mxml мой HostComponent не является ФАКТИЧЕСКИМ компонентом, а компонентом Spark, на котором он основан, который в моем случае был SkinnableComponent:

<fx:Metadata>
    [HostComponent("spark.components.supportClasses.SkinnableComponent")]
</fx:Metadata>

Затем я делаю скин, как обычно, с любыми стилями и эффектами, которые я хочу.

В моем App.mxml я могу включить файл css, но так как он называется defaults.css, мне не нужно (автоматически вставляется). Внутри defaults.css я прикрепляю скин темы к ComponentX:

@namespace view "view.*";

view|ComponentX
{
    skin-class:ClassReference("SkinForX");
}

Чтобы убедиться, что обложка темы совместима с тем, что вам нужно делать с ComponentX, вы используете нотацию SkinPart, чтобы указать, что определенные, напечатанные элементы должны быть в обложке. Например:

[SkinPart(required="true")]
public var input:Label;

И это все. Тем не менее вы можете поменять темы, если названия тем оформления совпадают. В противном случае вам придется поменять имена в файле CSS.

Это решение не такое чистое, как возможность привязывать объекты к их оболочкам в рамках темы, но я не думаю, что это все равно возможно.

...