2009-11-05 9 views
5

Czy istnieje sposób na utworzenie niestandardowej wartości css dla komponentu i udostępnienie jej klasie skórki, której składnik używa? Na przykład, jeśli mogę to określić w pliku CSS:flex 4: niestandardowa wartość css

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

czy istnieje sposób, aby myCustomValue dostępny w PanelSkin?

Odpowiedz

5

Nawet bez [Style] metadanych na temat klasy komponentów, wydaje się, można ustawić właściwości CSS i będą dostępne w Skóra. Jako test stworzyłem niestandardową skórkę i dołączałem ją do SkinnableComponent, a następnie ustawiłem właściwość "specjalny kolor" poprzez CSS. W skórze zwróciłem się do "{getStyle (" specialColor ")" i pobrałem wartość właściwości, którą ustawiłem.

Wszystko, co możesz ofiarować, pomijając metadane, to autouzupełnianie w CSS.

Mój kod testowy:

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

działa idealnie, dzięki! – greggreg

+0

Czy możesz to zrobić bez skóry? – HDave

0

Musisz określić host klasy komponentów w pliku MXML skóry. [HostComponent ("your.component.class")]

Po tym, będziesz w stanie uzyskać dowolny styl zdefiniowany w pliku css za pomocą hostComponent.getStyle ("myCustomValue")

Powiązane problemy