【问题标题】:Conditional color change <s:SolidColor>有条件的颜色变化 <s:SolidColor>
【发布时间】:2011-04-26 14:43:11
【问题描述】:

我无法让 DataGridItemRenderer 根据包含基于 data.Bld_Type 值的 if 语句的函数将颜色值传递给 &lt;s:SolidColor。代码如下。我对 Flex 很陌生,不确定问题出在哪里,或者这是否是正确的做法。任何帮助,将不胜感激。我试过传递一个十六进制数字和颜色名称。都不工作。谢谢。

<?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>

【问题讨论】:

    标签: apache-flex actionscript-3 data-binding flex4 itemrenderer


    【解决方案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";
                    }
    

    【讨论】:

    • 更改后出现此错误:1067:将 String 类型的值隐式强制转换为不相关的类型 uint。
    • 对不起。添加了一个代码 sn-p 来将颜色投射到uint
    • 错误消失了。但似乎该功能没有执行。我可能没有正确的“私有函数 onLoad():void”。当 调用上面的 mxml 代码时,函数应该执行。
    • 您应该覆盖 public function set data(value:Object):void 并从那里管理颜色值。
    • 非常感谢您的帮助。 (这可能超出了我的想象。)我实际上并没有渲染数据网格或填充数据网格的数据。我正在放置一个带有其中一列的矩形,并用颜色 swatchCol 填充矩形。不是公共函数 set data(value:Object):void 用于更改数据网格属性或数据吗?
    【解决方案2】:

    以下是简单的方法:

    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”来指定十六进制颜色。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      选项 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>
      

      【讨论】:

        猜你喜欢
        • 2011-08-25
        • 1970-01-01
        • 2016-10-21
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 2020-12-23
        相关资源
        最近更新 更多