2009-11-05 3 views
5

Есть ли способ создать пользовательское значение css для компонента и предоставить его доступному классу скинов, который использует этот компонент? например, если я определить это в CSS файле:flex 4: custom css value

s|Panel{ 
    skinClass: ClassReference("PanelSkin"); 
    myCustomValue: #CCCCFF; 
} 

есть способ сделать myCustomValue доступны в PanelSkin?

ответ

5

Даже без [Style] метаданных класса компонента, то кажется, что вы можете установить свойства CSS, и они будут доступны в кожа. В качестве теста я создал пользовательский скин и привязал его к SkinnableComponent, а затем установил свойство «особый цвет» с помощью CSS. В скине я привязывался к «{getStyle (« specialColor »)», и он получил значение свойства, которое я установил.

Все, что вы можете принести в жертву, опуская метаданные, - это автозаполнение CSS.

Мой тестовый код:

SkinTest.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<fx:Style> 
    @namespace s "library://ns.adobe.com/flex/spark"; 
    @namespace mx "library://ns.adobe.com/flex/halo"; 

    s|SkinnableComponent { 
     skin-class: ClassReference("skins.CustomSkin"); 
     special-color: blue; 
    } 
</fx:Style> 

<s:SkinnableComponent width="300" height="300"/> 
</s:Application> 

CustomSkin.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<s:Rect left="0" top="0" right="0" bottom="0"> 
    <s:fill> 
     <s:SolidColor color="{getStyle('specialColor')}"/> 
    </s:fill> 
</s:Rect> 
</s:SparkSkin> 
+0

отлично работает, спасибо! – greggreg

+0

Можете ли вы сделать это без наличия кожи? – HDave

0

Вы должны определить, вы размещаете класс компонента в файле MXML кожи. [HostComponent ("your.component.class")]

После этого вы сможете получить любой стиль, определенный в файле CSS, используя hostComponent.getStyle ("myCustomValue")