在Flex中设置禁用按钮外观

时间:2011-04-11 19:02:26

标签: flex flex3 stylesheet

我在Air应用程序,一个问题,三个按钮中做了一个琐事,在你选择一个之后,右边的按钮变成绿色,错误的按钮变成红色。我试图改变样式,所以我创建了一个Button.Right和一个Button.Wrong样式,但我还需要禁用按钮,这样当我显示正确的答案时,它们不会被多次点击

所以我在制作它时遇到了麻烦,所以当我将启用的属性设置为false时,按钮看起来并不灰白,并且alpha被调低了。

我试图在这里尽可能地保持简约,在css文件中更改disabled-overlay-alpha或disabledOverlayAlpha似乎没有做到这一点,也没有改变disabledBorderColor

要做到这一点的任何快速技巧吗?

3 个答案:

答案 0 :(得分:3)

这可能是一种有点肮脏的解决方法,但您可以尝试通过将mouseEnabled属性设置为false来禁用按钮,以禁止它们与鼠标进行交互。

答案 1 :(得分:1)

我一直使用有状态的皮肤来实现这一目标。它相对容易,但这就是我要做的事情:

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)

        }

    }

}

有时我不使用帆布,有时候我也不使用帆布。我使用的东西让我在实际资产中具有灵活性。然而,这个想法保持不变,这允许你为你的皮肤设置状态,你可以根据皮肤不同地对待事物。

答案 2 :(得分:0)

就个人而言,我认为你应该扩展你使用的任何组件并添加状态(correctNormal,correctDisabled,wrongNormal,wrongDisable),并根据给予组件的属性适当地改变状态。有了这个,您可以非常轻松地指定所有内容的外观。如果您使用Flex 4,会更容易。