2011-11-14 9 views
1

나는 Spark 버튼을위한 Flex 4 스킨을 구축하려고 시도했다. 도트 선택기를 사용하여 다른 상태에서 다른 색상을 지정하는 등 색상 및 기타 스타일을 원하는대로 조정했습니다. 그러나 단추를 사용할 수 없으면이 단추는 모두 무시됩니다. 무능력 상태에서, 내가하는 일에 관계없이, 제 버튼은 항상 잘못된 색을 가지며 0.5로 알파 화됩니다 (심지어 alpha.disabled = "1"로 명시되어 있더라도). 다른 모든 피부 상태는 예상대로 작동합니다. 여기서 무슨 일이 일어나고있는거야?플렉스 4 버튼 스킨 비활성화 알파 설정이 무시 되었습니까?

이것은 내 맞춤 피부입니다. 제대로 작동했다면 그림자 나 강조 표시가없고 그라디언트 회색이됩니다. 대신, 그것은 업 상태 (반짝이는 초록색)의 50 % 알파 버전으로 나타납니다.

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

Flash Builder의 스킨 만들기 마법사/대화 상자를 사용하여 자동으로 생성 된 Button 용 스킨에서도이 작업을 수행했습니다. 그렇더라도, 특히 비활성화 모드에서 알파를 1로 설정해도 효과가 없습니다.

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

오류가 _action1Button 오히려, 그것은 버튼의 컨테이너의 실제 버튼 아니라고했다 :

편집
이 버튼을 생성하고 해제하는 데 사용되는 코드입니다. 도! _action1Button.actionButton.enabled = false;으로 전환하면 문제가 해결됩니다.

답변

2

피부가 잘 작동합니다. 활성화 된 상태에서 녹색 버튼이 나타나면 활성화 된 경우 그림자가없는 회색 그라디언트가 false입니다. 나는 TestSkin이 위의 테스트 스킨 인 TestSkin을 테스트했습니다 :

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

나는 당신이 피부를 어떻게 사용하고 있는지에 관계가 있다고 가정합니다. 버튼 자체가 정의 된 코드를 게시 할 수 있습니까?

+0

가! 나는 이것이 이처럼 어리 석을 것이라고 생각했습니다. 나는 스킨 클래스를 올바르게 설정하고 있었지만, 나는 (컨스트럭션시 Actionscript에서) 버튼 자체가 아니라 컨테이너의 활성화 된 설정을 설정했다. 위의 편집에서 관련 코드를 게시했습니다. 그것을 들여다 주셔서 감사합니다! – Dwight