【问题标题】:Use StyleManager.setStyleDeclaration to set button skins in Flex使用 StyleManager.setStyleDeclaration 在 Flex 中设置按钮外观
【发布时间】:2010-02-09 10:49:51
【问题描述】:

我正在尝试加载一个 swf 文件,该文件具有按钮皮肤作为图像(在 swf 文件的库中,我给出了导出属性“TickMark”)并使用 StyleManager.setStyleDeclaration 设置 flex 按钮的皮肤。

我收到诸如“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 类,它可以工作......但基本上我想要它动态。

或者还有其他简单的方法可以动态地为弹性按钮设置皮肤(图像)?

【问题讨论】:

    标签: apache-flex skinning


    【解决方案1】:

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

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

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

    最好, 兰斯

    【讨论】:

    • 嗨 Lance,TickMark 类在 FLA 文件(导出设置)中定义。由于我为导出设置的资产是图像,因此导出设置将基类作为 BitmapData。 BitmapData 类需要两个参数,即宽度和高度。新的 cls() 发生在 flex 组件内部,我看到它在没有参数的情况下调用它。应该指出,我们不能使用 BitmapData 作为蒙皮 flex 组件的资产,否则我们在这里确实缺少一些东西。
    【解决方案2】:

    我相信,当您在 flex-app 中嵌入 export-symbol 时,它会处理大小问题,并且可能只是直接嵌入 png。

    由于您的符号类扩展了 BitmapData,它必须通过在构造函数中传递所需的参数来实例化。因此,无论您遇到什么错误,都是按预期设计和工作的。

    您可以将 png 包装在一些其他类型的符号(精灵、影片剪辑等)中并导出。在 setStyle (..,..) 中使用时应该可以正常工作

    【讨论】:

    • 感谢您的回复,阿卜杜勒。我确实尝试将图像包装在影片剪辑中,但是当我将类设置为 setStyle(upSkin,cls) 时,它会在 newSkin = IFlexDisplayObject(new newSkinClass()); 处引发无法将类 MyClass 转换为 FlexDisplayObject 的错误;在 Button.as 类中。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多