Условное изменение цвета - PullRequest
0 голосов
/ 26 апреля 2011

Я не могу заставить DataGridItemRenderer передать значение цвета в <s:SolidColor на основе функции, содержащей инструкцию if на основе значения data.Bld_Type. Код ниже. Я очень плохо знаком с 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>

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Попробуйте изменить следующее:

[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 голосов
/ 28 июля 2013

Опция 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>
0 голосов
/ 26 апреля 2011

Вот простой способ сделать это:

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».

Надеюсь, это поможет.

...