A completare gli angoli di un DateField in Flex 4?
-
20-09-2019 - |
Domanda
sto utilizzando Flash Builder, con Flex 4 SDK e sto cercando di creare un DateField
in cui la componente TextInput
ha gli angoli arrotondati.
Ho provato il seguente codice che non funziona:
<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"
xmlns:components="components.*">
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/halo";
@namespace components "components.*";
.roundedTI
{
corner-radius: 10;
borderStyle: solid;
}
</fx:Style>
<mx:DateField textInputStyleName="roundedTI"/>
</s:Application>
Può la comunità aiutarmi a correggere eventuali errori visibili nel mio codice o punto me una guida alternativa o tutorial che dimostra come fare questo?
Soluzione
Con Flex 4, tutto è nelle bucce. CSS è utilizzato in gran parte solo per applicare una pelle per un componente o classe di componenti, mentre in Flex 3 è stato utilizzato per impostare tonnellate di proprietà. La cosa interessante è, tuttavia, che è possibile definire qualsiasi valore arbitrario proprietà di stile in CSS e sarà accessibile tramite getStyle
nella pelle!
In quanto tali, non hanno più la proprietà cornerRadius
. Al contrario, è necessario creare un "DateFieldSkin", e applicarlo al componente tramite un selettore CSS. La pelle di default DateField utilizza il DropDownSkin
. Ecco il codice per risolvere questo:
DateFieldSkin :
<?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">
<s:states>
<s:State name="normal"/>
<s:State name="disabled"/>
</s:states>
<!--- @private -->
<s:Rect id="border" left="0" right="0" top="0" bottom="0"
radiusX="{getStyle('cornerRadius')}" radiusY="{getStyle('cornerRadius')}">
<s:stroke>
<!--- @private -->
<s:SolidColorStroke id="borderStroke" color="0x5380D0" />
</s:stroke>
<s:fill>
<!--- @private -->
<s:SolidColor id="bgFill" color="0xFFFFFF"/>
</s:fill>
</s:Rect>
</s:Skin>
Esempio App :
<?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:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
.roundedTI
{
corner-radius: 10;
borderStyle: solid;
borderSkin: ClassReference("DateFieldSkin");
}
</fx:Style>
<mx:DateField textInputStyleName="roundedTI"/>
</s:Application>
È anche possibile hardcode valori del raggio nella pelle, o fare qualcosa di ancora più dinamico e ottimizzato. Questo è solo un inizio.
Fatemi sapere se funziona, Lance