sinkingboat 发表于 2011-12-22 08:54

FLEX元标签_style

<font color="#800000"><b>1.概述</b></font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当你创建自定义组件的时候,有可能你想创建一个style属性定义样式。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 元标签格式如下<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )]<br>下面的表格描述了元数据标签的各种属性:
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td valign="top"><font size="2"><strong>Option</strong></font></td>
<td valign="top"><font size="2"><strong>Type</strong></font></td>
<td valign="top"><font size="2"><strong>Description</strong></font></td>
</tr>
<tr>
<td valign="top"><font size="2">name</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">(必填) 定义style的名称.</font></td>
</tr>
<tr>
<td valign="top"><font size="2">type</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">定义你写入的这个style属性的值类型。如果这个类型不是一个actionScript类型。如果是你自定义的类型,请使用类路径全名,比如: <em>packageName.className</em>.</font></td>
</tr>
<tr>
<td valign="top"><font size="2">arrayType</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">如果type是Array类型,则arrayType定义了其内的元素(Array elements)数据类型。如果是你自定义的类型,请使用类路径全名,比如: <em>packageName.className</em>.</font></td>
</tr>
<tr>
<td valign="top"><font size="2">format</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">定义这个属性的单位。比如,如果type为”Number”,则你可以定义format=”Length”,或者,如果你定义了type=”uint”, 你可以定义format=”Color”.</font></td>
</tr>
<tr>
<td valign="top"><font size="2">enumeration</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">为这个style的属性定义了它的值列表enumerated list.</font></td>
</tr>
<tr>
<td valign="top"><font size="2">inherit</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">定义这个属性是否可以继承.你可以输入yes and no. 这个属性指的是CSS继承, 而不是对象继承. 所有的子对象自动的继承对象的style属性。</font></td>
</tr>
<tr>
<td valign="top"><font size="2">states</font></td>
<td valign="top"><font size="2">String</font></td>
<td valign="top"><font size="2">对于皮肤属性,你可以用style来为组件的</font><font size="2">多个状态</font><font size="2">定义各种皮肤状态。比如:Slider.thumbSkin style 使用了下面的 元数据标签:</font><p><font size="2">。</font></p></td>
</tr>
</tbody>
</table>
<p>下面的例子为 textSelectedColor 样式属性的定义:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br></p><p>下面的例子为 verticalAlign 样式属性的定义:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br></p><font color="#800000"><b>2.自定义样式举例</b></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比如你创建了一个组件StyledRectangle,使用了一个渐变的颜色,如下所示<br><div align="center"><a href="http://livedocs.adobe.com/flex/3/html/images/gradientRect.png" target="_blank" target="_blank"><img src="http://livedocs.adobe.com/flex/3/html/images/gradientRect.png" .load="imgResize(this, 650);" ;="" border="0"></a><br></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个渐变色使用了两个颜色,你可以设置一个新的style属性称之为fillColors,fillColors style可以由两个颜色的数组构成。代码详见 StyledRectangle.as ,演示代码如下<br><div id="codeText" class="codeText"><ol style="margin:0 1px 0 0;padding:5px 0;" start="1" class="dp-css"><li><span style="color:#000000;"><span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">?</span><span style="color:#FF0000;">xml</span> <span style="color:#FF0000;">version</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"1.0"</span><span style="color:#0000CC;">?</span><span style="color:#0000CC;">&gt;</span> <br></span></li><li>
<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">!</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span> skinstyle\MainRectWithFillStyles<span style="color:#0000CC;">.</span>mxml <span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">&gt;</span><br></li><li>
<span style="color:#0000CC;">&lt;</span>mx<span style="color:#0000CC;">:</span>Application xmlns<span style="color:#0000CC;">:</span>mx<span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"http://www.adobe.com/2006/mxml"</span> <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;xmlns<span style="color:#0000CC;">:</span>MyComp<span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"myComponents.*"</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">!</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span> 通过CSS selector设计style<span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span>mx<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Style</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StyledRectangle <span style="color:#0000CC;">{</span>fillColors<span style="color:#0000CC;">:</span> #FF00FF<span style="color:#0000CC;">,</span> #00FFFF<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">/</span>mx<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Style</span><span style="color:#0000CC;">&gt;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">!</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span> 这里使用了默认的样式<span style="color:#0000CC;">.</span> <span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span>MyComp<span style="color:#0000CC;">:</span>StyledRectangle <span style="color:#FF0000;">id</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"mySR1"</span><span style="color:#0000CC;">/</span><span style="color:#0000CC;">&gt;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">!</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span> 这里使用了默认的样式<span style="color:#0000CC;">.</span> <span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span>MyComp<span style="color:#0000CC;">:</span>StyledRectangle <span style="color:#FF0000;">id</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"mySR2"</span><span style="color:#0000CC;">/</span><span style="color:#0000CC;">&gt;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">!</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span> 利用 setStyle<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span> <span style="color:#FF0000;">方法改变默认的样式</span><span style="color:#0000CC;"></span> <span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span>mx<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Button</span> <span style="color:#FF0000;">label</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"Set gradient"</span> <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;click<span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"mySR2.setStyle('fillColors', );"</span><span style="color:#0000CC;">/</span><span style="color:#0000CC;">&gt;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">!</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span> <span style="color:#FF0000;">Set</span> fillColors <span style="color:#FF0000;">in</span> MXML<span style="color:#0000CC;">.</span> <span style="color:#0000CC;">-</span><span style="color:#0000CC;">-</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span>MyComp<span style="color:#0000CC;">:</span>StyledRectangle <span style="color:#FF0000;">id</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"mySR3"</span> fillColors<span style="color:#0000CC;">=</span><span style="color:#FF00FF;">""</span><span style="color:#0000CC;">/</span><span style="color:#0000CC;">&gt;</span><br></li><li>
<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">/</span>mx<span style="color:#0000CC;">:</span>Application<span style="color:#0000CC;">&gt;</span></li></ol></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本例中,对于组件StyledRectangle 的selector的默认值为 #FF00FF 和 #00FFFF。通过使用setStyle(),可以改变fillColor 的样式。最后一个组件说明可以通过使用MXML的tag标签设置style属性。<br><br><font color="#0000F0"><b>2.1 定义一个样式属性</b></font><br><br>(1) 在类的定义之前插入一个元标签<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插入一个元标签,定义一个MXML tag 样式属性。如果你没有使用标签,编译器将给出一个语法错误。<br>(2) 重载styleChanged() 方法,检测属性值的变化。详见 <a href="http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html#styleChanged%28%29" target="_blank" target="_blank">styleChanged()</a><br>(3) 重载updateDisplayList()方法合并自定义组件样式的显示。详见 <a href="http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html#updateDisplayList%28%29" target="_blank" target="_blank">updateDisplayList()</a><br>(4) 定义一个static 初始化函数,设置默认的样式属性值。详见<a href="http://livedocs.adobe.com/flex/3/html/skinstyle_3.html#184171" target="_blank" target="_blank">Setting default style values</a>.<br><br>下面定义了一个自定义组件StyledRectangle ,包含了自定义属性fillColors 和 alphas ,可以设置两种颜色的渐变和透明度。<br><div id="codeText" class="codeText"><ol style="margin:0 1px 0 0;padding:5px 0;" start="1" class="dp-css"><li><span style="color:#000000;"><span style="color:#0000FF;">package</span> myComponents <br></span></li><li>
<span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// skinstyle/myComponents/StyledRectangle.as</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">import</span> mx<span style="color:#0000CC;">.</span>core<span style="color:#0000CC;">.</span>UIComponent<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">import</span> mx<span style="color:#0000CC;">.</span>styles<span style="color:#0000CC;">.</span>CSSStyleDeclaration<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">import</span> mx<span style="color:#0000CC;">.</span>styles<span style="color:#0000CC;">.</span>StyleManager<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">import</span> flash<span style="color:#0000CC;">.</span>display<span style="color:#0000CC;">.</span>GradientType<span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义了两个样式属性<br></span></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">[</span><span style="color:#FF0000;">Style</span><span style="color:#0000CC;">(</span><span style="color:#FF0000;">name</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"fillColors"</span><span style="color:#0000CC;">,</span><span style="color:#FF0000;">type</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"Array"</span><span style="color:#0000CC;">,</span><span style="color:#FF0000;">format</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"Color"</span><span style="color:#0000CC;">,</span>inherit<span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"no"</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">]</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">[</span><span style="color:#FF0000;">Style</span><span style="color:#0000CC;">(</span><span style="color:#FF0000;">name</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"alphas"</span><span style="color:#0000CC;">,</span><span style="color:#FF0000;">type</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"Array"</span><span style="color:#0000CC;">,</span><span style="color:#FF0000;">format</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"Number"</span><span style="color:#0000CC;">,</span>inherit<span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"no"</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">]</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">public</span> <span style="color:#0000FF;">class</span> StyledRectangle <span style="color:#0000FF;">extends</span> UIComponent<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">{</span>    <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义一个静态变量.</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">private</span> <span style="color:#0000FF;">static</span> var classConstructed<span style="color:#0000CC;">:</span><span style="color:#0000FF;">Boolean</span> <span style="color:#0000CC;">=</span> classConstruct<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义一个静态方法.</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">private</span> <span style="color:#0000FF;">static</span> function classConstruct<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">:</span><span style="color:#0000FF;">Boolean</span> <span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">if</span> <span style="color:#0000CC;">(</span><span style="color:#0000CC;">!</span>StyleManager<span style="color:#0000CC;">.</span>getStyleDeclaration<span style="color:#0000CC;">(</span><span style="color:#FF00FF;">"StyledRectangle"</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">)</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 如果 StyledRectangle组件的CSS定义为空,则创建一个默认的, </span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var myRectStyles<span style="color:#0000CC;">:</span>CSSStyleDeclaration <span style="color:#0000CC;">=</span> <span style="color:#0000FF;">new</span> CSSStyleDeclaration<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRectStyles<span style="color:#0000CC;">.</span>defaultFactory <span style="color:#0000CC;">=</span> function<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">:</span><span style="color:#0000FF;">void</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">this</span><span style="color:#0000CC;">.</span>fillColors <span style="color:#0000CC;">=</span> <span style="color:#0000CC;">[</span>0xFF0000<span style="color:#0000CC;">,</span> 0x0000FF<span style="color:#0000CC;">]</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">this</span><span style="color:#0000CC;">.</span>alphas <span style="color:#0000CC;">=</span> <span style="color:#0000CC;">[</span>0<span style="color:#0000CC;">.</span>5<span style="color:#0000CC;">,</span> 0<span style="color:#0000CC;">.</span>5<span style="color:#0000CC;">]</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StyleManager<span style="color:#0000CC;">.</span>setStyleDeclaration<span style="color:#0000CC;">(</span><span style="color:#FF00FF;">"StyledRectangle"</span><span style="color:#0000CC;">,</span> myRectStyles<span style="color:#0000CC;">,</span> true<span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">return</span> true<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 构造器</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">public</span> function StyledRectangle<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span> <span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">super</span><span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span>    <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span>         <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义一个默认 100 x 100 pixels 大小.</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF0000;">override</span> <span style="color:#0000FF;">protected</span> function measure<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">:</span><span style="color:#0000FF;">void</span> <span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">super</span><span style="color:#0000CC;">.</span>measure<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;measuredWidth <span style="color:#0000CC;">=</span> measuredMinWidth <span style="color:#0000CC;">=</span> 100<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;measuredHeight <span style="color:#0000CC;">=</span> measuredMinHeight <span style="color:#0000CC;">=</span> 100<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义一个标志,表示style属性的值改变了</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">private</span> var bStypePropChanged<span style="color:#0000CC;">:</span><span style="color:#0000FF;">Boolean</span> <span style="color:#0000CC;">=</span> true<span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义一个变量保存colors的值.</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">private</span> var fillColorsData<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Array</span><span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义了一个变量保存当前lapha值.</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">private</span> var alphasData<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Array</span><span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 定义变量用于额外的填充控制</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">private</span> var ratios<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Array</span> <span style="color:#0000CC;">=</span> <span style="color:#0000CC;">[</span>0x00<span style="color:#0000CC;">,</span> 0xFF<span style="color:#0000CC;">]</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 重载了 styleChanged()方法检测style的改变.</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF0000;">override</span> <span style="color:#0000FF;">public</span> function <span style="color:#FF0000;">styleChanged</span><span style="color:#0000CC;">(</span>styleProp<span style="color:#0000CC;">:</span><span style="color:#FF0000;">String</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">:</span><span style="color:#0000FF;">void</span> <span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">super</span><span style="color:#0000CC;">.</span><span style="color:#FF0000;">styleChanged</span><span style="color:#0000CC;">(</span>styleProp<span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 检测style是否改变. </span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">if</span> <span style="color:#0000CC;">(</span>styleProp<span style="color:#0000CC;">=</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"fillColors"</span> <span style="color:#0000CC;">|</span><span style="color:#0000CC;">|</span> styleProp<span style="color:#0000CC;">=</span><span style="color:#0000CC;">=</span><span style="color:#FF00FF;">"alphas"</span><span style="color:#0000CC;">)</span> <span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bStypePropChanged<span style="color:#0000CC;">=</span>true<span style="color:#0000CC;">;</span> <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invalidateDisplayList<span style="color:#0000CC;">(</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">return</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li><span style="color:#0000CC;"><br></span></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 重载updateDisplayList() 方法更新组件</span></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF0000;">override</span> <span style="color:#0000FF;">protected</span> function updateDisplayList<span style="color:#0000CC;">(</span>unscaledWidth<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Number</span><span style="color:#0000CC;">,</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unscaledHeight<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Number</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">:</span><span style="color:#0000FF;">void</span> <span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">super</span><span style="color:#0000CC;">.</span>updateDisplayList<span style="color:#0000CC;">(</span>unscaledWidth<span style="color:#0000CC;">,</span> unscaledHeight<span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000FF;">if</span> <span style="color:#0000CC;">(</span>bStypePropChanged<span style="color:#0000CC;">=</span><span style="color:#0000CC;">=</span>true<span style="color:#0000CC;">)</span> <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">{</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF9900;">// 如果style改变,则重新填充</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillColorsData<span style="color:#0000CC;">=</span><span style="color:#FF0000;">getStyle</span><span style="color:#0000CC;">(</span><span style="color:#FF00FF;">"fillColors"</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alphasData<span style="color:#0000CC;">=</span><span style="color:#FF0000;">getStyle</span><span style="color:#0000CC;">(</span><span style="color:#FF00FF;">"alphas"</span><span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF0000;">graphics</span><span style="color:#0000CC;">.</span>beginGradientFill<span style="color:#0000CC;">(</span>GradientType<span style="color:#0000CC;">.</span>LINEAR<span style="color:#0000CC;">,</span> <br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillColorsData<span style="color:#0000CC;">,</span> alphasData<span style="color:#0000CC;">,</span> ratios<span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#FF0000;">graphics</span><span style="color:#0000CC;">.</span><span style="color:#FF0000;">drawRect</span><span style="color:#0000CC;">(</span>0<span style="color:#0000CC;">,</span> 0<span style="color:#0000CC;">,</span> unscaledWidth<span style="color:#0000CC;">,</span> unscaledHeight<span style="color:#0000CC;">)</span><span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bStypePropChanged<span style="color:#0000CC;">=</span>false<span style="color:#0000CC;">;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">}</span><br></li><li>
<span style="color:#0000CC;">}</span></li></ol></div><font color="#0000F0"><b><br>2.2 创建一个默认的style属性值</b></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当你为组件创建一个style属性时,必须决定如何设置默认值,这不象在构造函数内调用setStyle()那么简单,你必须考虑FLEX如何处理style,以及style的处理次序。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当FLEX编译你的应用程序,在创建任何组件之前,FLEX首先检查&lt;mx:Style&gt; 中的定义标签。因此,如果你在构造函数内调用setStyle(),则在处理&lt;mx:Style&gt; 标签之后调用,意味着将在组件的每个实例化对象中都设置了style属性。这样的重载与&lt;mx:Style&gt;中的声明将发生冲突。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最简单的方式是通过一个静态函数给style属性设置默认值。静态函数一旦执行,FLEX首先创建一个组件的实例对象。因此,在定义一个style属性时,你可以在自定义组件类中使用classConstructed 变量和classConstruct()定义一个初始化静态函数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当FLEX创建一个StyledRectangle 组件时,调用classConstruct()方法。这个方法决定自定义组件使用&lt;mx:Style&gt; 时,是否为style设置默认值。如果没有定义style,classConstruct()将创建一个,为style属性设置默认值。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此,如果你的应用程序忽略了&lt;mx:Style&gt;标签,通过classConstruct()将自动创建一个默认的style定义。例如<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;MyComp:StyledRectangle/&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果使用了&lt;mx:Style&gt;标签,&lt;mx:Style&gt;将创建默认的style定义,如下所示<br><div id="codeText" class="codeText"><ol style="margin:0 1px 0 0;padding:5px 0;" start="1" class="dp-css"><li><span style="color:#000000;"><span style="color:#0000CC;">&nbsp;&nbsp;&nbsp; &lt;</span>mx<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Style</span><span style="color:#0000CC;">&gt;</span><br></span></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StyledRectangle <span style="color:#0000CC;">{</span>fillColors<span style="color:#0000CC;">:</span> #FF00FF<span style="color:#0000CC;">,</span> #00FFFF<span style="color:#0000CC;">}</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span><span style="color:#0000CC;">/</span>mx<span style="color:#0000CC;">:</span><span style="color:#FF0000;">Style</span><span style="color:#0000CC;">&gt;</span><br></li><li>
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000CC;">&lt;</span>MyComp<span style="color:#0000CC;">:</span>StyledRectangle<span style="color:#0000CC;">/</span><span style="color:#0000CC;">&gt;</span></li></ol></div><br><font color="#800000"><b>3. 为皮肤定义一个style</b></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FLEX允许你使用style属性设置组件皮肤。自定义组件也可以设置皮肤。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置皮肤与设置style属性的原理是一样的,为皮肤设置一个style属性触发器以调用styleChanged()。styleChanged()检测皮肤的改变,在updateDisplayList() 中执行组件的更新。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置皮肤与设置style属性的不同之处在于如何描述 标签。当style属性为skin时,如下例所示<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><br><br><font color="#800000"><b>参考文献</b></font><br>1.Example: Creating style properties . http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_3.html<br>2.Flex Style 元数据标签 . http://www.myflexhero.com/share/flex-hero-flex4/flex-metadata-tag/323<br><br>
页: [1]
查看完整版本: FLEX元标签_style