在Flex中设置禁用按钮外观

我在Air应用程序,问题,三个按钮中做了一个琐事,在你选择一个之后,右边的按钮变成绿色,错误的按钮变成红色。我试图改变样式,所以我创建了一个Button.Right和一个Button.Wrong样式,但我还需要禁用按钮,这样当我显示正确的答案时,它们不会被多次点击。 所以我在制作它时遇到了麻烦,因此当我将其enabled属性设置为false时,按钮看起来并不灰白,并且alpha被关闭了。 我试图在这里尽可能简约,在css文件中更改disabled-overlay-alpha或disabledOverlayAlpha似乎没有做到这一点,也没有改变disabledBorderColor 任何快速的技巧来做到这一点?     
已邀请:
这可能是一个有点脏的解决方法,但您可以尝试通过将其
mouseEnabled
属性设置为
false
来禁用按钮,以禁止它们与鼠标交互。     
我总是使用有状态的皮肤来实现这一目标。它相对容易,但我会这样做: CSS(路径根据您的资产而变化):
Button {
   skin:ClassReference('com.mysite.assets.skins.MyStatefulSkin');
}
然后,在/ com / mysite / assets / skins中,您将拥有:
package com.mysite.assets.skins {

    import flash.display.GradientType;
    import mx.containers.Canvas;

    public class MyStatefulSkin extends Canvas {

        import flash.display.Graphics;
        import flash.geom.Rectangle;
        import mx.graphics.GradientEntry;
        import mx.graphics.LinearGradient;

        public function MyStatefulSkin() {
            super();
        }

        protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth,unscaledHeight);

            var w:Number = unscaledWidth;
            var h:Number = unscaledHeight;
            var cr:Number = getStyle('cornerRadius');
            var backgroundFillColors:Array;

            var g:Graphics = graphics;
            g.clear();

            switch( name ){
                case "upSkin":
                    backgroundFillColors = [0xffffff,0xdddddd];
                    break;
                case "overSkin":
                    backgroundFillColors = [0xffffff,0xdddddd];
                    break;
                case "downSkin":
                    backgroundFillColors = [0xffffff,0xdddddd];
                    break;
                case "disabledSkin":
                    backgroundFillColors = [0xffffff,0xdddddd];
                    break;
            }

            // Draw Background
            g.beginGradientFill( GradientType.LINEAR, backgroundFillColors, [1.0,1.0], [0,255], verticalGradientMatrix( 0, 0, w, h ) );
            g.drawRoundRectComplex( 0, 0, w, h, cr, cr, cr, cr );
            g.endFill();

            // Draw other things (borders, icons, etc)

        }

    }

}
有时我不使用帆布,有时候我也不使用帆布。我使用的东西让我在实际资产中具有灵活性。然而,这个想法仍然是相同的,这允许您为您的皮肤设置状态,您可以根据皮肤不同地对待事物。     
就个人而言,我认为你应该扩展你使用的任何组件并添加状态(correctNormal,correctDisabled,wrongNormal,wrongDisable),并根据给予组件的属性适当地改变状态。有了这个,您可以非常轻松地指定所有内容的外观。如果您使用Flex 4,会更容易。     

要回复问题请先登录注册