使用StyleManager.setStyleDeclaration在Flex中设置按钮外观

时间:2010-02-09 10:49:51

标签: flex skinning

我正在尝试加载一个包含按钮外观作为图像的swf文件(在swf文件的库中,我已经给出了导出属性'TickMark')并使用StyleManager.setStyleDeclaration设置了一个flex按钮的外观。 / p>

我收到错误,例如'TickMark()上的参数计数不匹配。预计2,得到0。'

这就是我想要做的事情:

 private function init():void
            {
             loader = new Loader();
             loader.contentLoaderInfo.addEventListener(Event.COMPLETE,styleSWFLoaded);
             loader.load(new URLRequest("styles.swf"),new LoaderContext(false,ApplicationDomain.currentDomain));

            }

  private function createStyle(styleName:String):void
            {

             var style:CSSStyleDeclaration = new CSSStyleDeclaration(styleName);


                var cls:Class = ApplicationDomain.currentDomain.getDefinition(ss) as Class;

                style.setStyle("upSkin",cls);

              }
             }
             StyleManager.setStyleDeclaration(".buttonme",style,true);
            }

当我将这个新样式'buttonme'应用于按钮时,我得到以下错误:

ArgumentError: Error #1063: Argument count mismatch on TickMark(). Expected 2, got 0.

不确定为什么会发生这种情况,奇怪的是,当我嵌入相同的swf文件时,它会起作用,如下所示:

[Embed(source="styles.swf", symbol="Tick")] 
private var GraphicClass:Class;

如果我在setStyleDeclaration中使用类GraphicClass,它可以工作......但基本上我想要它动态。

还是有其他简单的方法可以动态设置(图像)弹性按钮吗?

2 个答案:

答案 0 :(得分:0)

你应该能够动态地设置你的皮肤。它可能与您的TickMark类有关。我假设您执行style.setStyle("upSkin", cls);clsTickMark并且它有两个必需的构造函数args:TickMark(arg1:Object, arg2:Object)。真的吗?在setStyle方法的某处,它正在执行new cls()

如果是这样,只需确保没有构造函数参数,它应该可以工作。

如果没有,请尝试遵循堆栈跟踪并在Flex Builder中使用breakpoints(如果您还没有),这应该有助于查明问题。

最佳, 兰斯

答案 1 :(得分:0)

我相信,当你在flex-app中嵌入导出符号时,它会照顾大小,也许只是直接嵌入png。

当您的符号类扩展BitmapData时,必须通过在构造函数中传递必需的参数来实例化它。所以无论你得到什么错误,都是按设计和工作方式进行的。

您可以将png包装在其他类型的符号(精灵,动画片段等)中并导出。在setStyle(..,..)

中使用时应该可以正常工作