Flex 4 скинов отключен, настройка альфа игнорируется? - PullRequest
1 голос
/ 15 ноября 2011

Я попытался создать скин Flex 4 для кнопки Spark, обычная практика.Я настроил цвета и другие стили по своему вкусу, в том числе с помощью точечных селекторов, чтобы указать альтернативные цвета и тому подобное в разных состояниях.Тем не менее, все они игнорируются, когда кнопка отключена.Независимо от того, что я делаю, в отключенном состоянии моя кнопка всегда имеет неправильный цвет и имеет альфа-значение до 0,5 (даже если я специально заявляю, что alpha.disabled = "1").Все остальные состояния кожи работают как положено.Что здесь происходит?

Это мой пользовательский скин.Если бы он работал правильно, он, казалось бы, не имел тени или подсветки и был бы градиентным серым цветом.Вместо этого он выглядит как 50% альфа-версия состояния up (блестящий зеленый).

<?xml version="1.0" encoding="utf-8"?>
<s:SparkButtonSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
             minWidth="21" minHeight="21" alpha.disabled="1">

    <fx:Metadata>
        <![CDATA[ 
            [HostComponent("spark.components.Button")]
        ]]>
    </fx:Metadata>

    <s:states>
        <s:State name="up" />
        <s:State name="over" />
        <s:State name="down" />
        <s:State name="disabled" />
    </s:states>

    <s:Rect id="backgroundAndShadow" left="0" right="0" top="0" bottom="0" radiusX="5" radiusY="5">
        <s:filters>
            <s:DropShadowFilter blurX="5" blurY="5" blurX.down="3" blurY.down="3" alpha="0.5" distance="1" distance.down="0" angle="90" excludeFrom="disabled" />
        </s:filters>
        <s:fill>
            <s:LinearGradient rotation="90">
                <s:GradientEntry color.up="#00AD00" color="#007A00" color.disabled="#cccccc" />
                <s:GradientEntry color.up="#29FF29" color="#00F500" color.disabled="#bbbbbb" />
            </s:LinearGradient>
        </s:fill>
    </s:Rect>

    <s:Rect id="highlight" left="1" right="1" top="1" height="50%" topLeftRadiusX="4" topLeftRadiusY="4" topRightRadiusX="4" topRightRadiusY="4" excludeFrom="disabled">
        <s:fill>
            <s:LinearGradient rotation="90">
                <s:GradientEntry color="#ffffff" alpha="0.8" />
                <s:GradientEntry color="#ffffff" alpha="0.3" />
            </s:LinearGradient>
        </s:fill>
    </s:Rect>

    <s:Label id="labelDisplay"
             textAlign="center"
             horizontalCenter="0" verticalCenter="1" verticalAlign="middle"
             color="#ffffff" color.disabled="#555555"
             fontWeight="bold"
             left="2" right="2" top="2" bottom="2">

        <s:filters>
            <s:DropShadowFilter blurX="3" blurY="3" alpha="0.5" distance="1" distance.down="0" angle="90" excludeFrom="disabled" />
        </s:filters>
    </s:Label>

</s:SparkButtonSkin>

Я также сделал это с автоматически сгенерированным скином для Button с помощью мастера / диалога создания скина Flash Builder.Даже тогда, в частности установка альфа в 1 в отключенном режиме не имела никакого эффекта.

Редактировать
Это код, используемый для создания, а затем отключения кнопки:

_action1Button = new Action1Button();
view.actionGroup.addElement(_action1Button);
_action1Button.enabled = false;

Ошибка состояла в том, что _action1Button - это не фактическая кнопка, а скорее контейнер кнопки.Doh!Переключение на _action1Button.actionButton.enabled = false; устранило проблему.

1 Ответ

2 голосов
/ 15 ноября 2011

Твоя кожа отлично работает для меня.Я получаю зеленую кнопку во включенном состоянии, а затем серый градиент без тени при включении - false.Я проверил это так (где TestSkin - ваша кожа, опубликованная выше):

<s:Button skinClass="TestSkin" enabled="false" />

Я предполагаю, что проблема связана с тем, как вы используете кожу.Можете ли вы опубликовать код, где определяется сама кнопка?

...