2011-04-26 22 views
0

基於包含基於data.Bld_Type值的if語句的函數,我無法讓DataGridItemRenderer將顏色值傳遞到<s:SolidColor。下面的代碼。我對Flex很感興趣,不確定這個問題是什麼,或者這是否是正確的方式。任何幫助,將不勝感激。我試過傳遞一個十六進制數字和顏色名稱。既沒有工作。謝謝。有條件的顏色更改<s:SolidColor>

<?xml version="1.0" encoding="utf-8"?> 
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    focusEnabled="true"> 

    <fx:Script> 
     <![CDATA[ 
     import mx.events.FlexEvent; 

     private var swatchCOL:uint; 

     /** color function **/ 
     private function onLoad():void 
     { 
      if(data.Bld_Type == "Office") 
       { 
       swatchCOL="ee7970"; 
       //***swatchCOL="red"; 

       }  
      else if(data.Bld_Type == "Office/Warehouse") 
       { 
       swatchCOL="70b2ee"; 
       //***swatchCOL="blue"; 
       } 
     } 
     ]]> 
    </fx:Script> 



    <s:Group left="10" right="10" top="10" bottom="10"> 
     <s:Rect width="25" height="25"> 
      <s:stroke> 
       <s:SolidColorStroke color="green" weight="2"/>       
      </s:stroke> 
      <s:fill> 
       <s:SolidColor color="swatchCOL"/> 
      </s:fill> 
     </s:Rect> 
    </s:Group> 



</s:MXDataGridItemRenderer> 

回答

1

試圖改變如下:

[Bindable] 
private var swatchCOL:uint; 

和:

<s:fill> 
    <s:SolidColor color="{swatchCOL}"/> 
</s:fill> 

最後變色類型:

if(data.Bld_Type == "Office") 
       { 
       swatchCOL=0xee7970; 
       //***swatchCOL="red"; 

       }  
      else if(data.Bld_Type == "Office/Warehouse") 
       { 
       swatchCOL=0x70b2ee; 
       //***swatchCOL="blue"; 
       } 
+0

:1067:隱式強制類型爲String的值賦給不相關的類型uint。 – user725545 2011-04-26 14:54:34

+0

對不起。添加了一個代碼片段來將顏色投射到'uint'。 – Constantiner 2011-04-26 14:58:31

+0

錯誤消失了。但似乎函數沒有執行。我可能沒有「私人功能onLoad():void」正確。當調用上面的mxml代碼時,函數會假設執行。 – user725545 2011-04-26 15:19:58

0

這裏是最簡單的方式做到這一點:

override public function set data(value:Object):void { 
    super.data = value; 

    if(data.Bld_Type == "Office") 
     swatchCOL.color = 0xee7970; 
    else if(data.Bld_Type == "Office/Warehouse") 
     swatchCOL.color = 0x70b2ee; 
} 

不需要綁定,因爲只要數據更改爲您的項目渲染器就會調用數據設置器。此外,您需要設置「顏色」成員,而不是SolidColor對象本身。您可以通過將值預置爲「0x」來指定十六進制顏色。

希望有所幫助。

0

選項a)使用(例如,如果顏色不動態生成的):

<s:states> 
    <s:State name="stateA" /> 
    <s:State name="stateB" /> 
</s:states> 
<!-- somewhere else in your code --> 
<s:Rect id="bgFill" top="0" right="0" left="0" bottom="0"> 
    <s:fill> 
     <s:SolidColor color.stateA="#313131" color.stateB="#f4dede" /> 
    </s:fill> 
</s:Rect> 
<!-- somewhere else in your code --> 
<fx:Script> 
<![CDATA[ 
if(data.Bld_Type == "Office") 
      { 
      this.currentState = "stateA" 
      //***swatchCOL="red"; 

      }  
     else if(data.Bld_Type == "Office/Warehouse") 
      { 
      this.currentState = "stateB" 
      //***swatchCOL="blue"; 
      } 
    ]]> 
</fx:Script> 

選項b)使用AS3:此錯誤更改後

var fillColor:SolidColor; 
if(data.Bld_Type == "Office") 
{ 
fillColor = new SolidColor(0xYOUR_HEX_COLOR); 
bgFill.fill = fillColor; 
}  
else if(data.Bld_Type == "Office/Warehouse") 
{ 
fillColor = new SolidColor(0xYOUR_OTHER_HEX_COLOR); 
bgFill.fill = fillColor; 
} 


<s:Group left="10" right="10" top="10" bottom="10"> 
    <s:Rect id="bgFill" width="25" height="25"> 
     <s:stroke> 
      <s:SolidColorStroke color="green" weight="2"/>       
     </s:stroke> 
     <s:fill> 
      <s:SolidColor color="#ffffff"/> <!-- #ffffff is an example of a default color --> 
     </s:fill> 
    </s:Rect> 
</s:Group>