Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过单击Flex3中的按钮动态选择css文件_Css_Apache Flex_Flex3_Styles_Stylesheet - Fatal编程技术网

通过单击Flex3中的按钮动态选择css文件

通过单击Flex3中的按钮动态选择css文件,css,apache-flex,flex3,styles,stylesheet,Css,Apache Flex,Flex3,Styles,Stylesheet,我需要创建一个应用程序,其中我们正在更改应用程序的样式,该样式是基于按钮单击的应用程序的主题 我已经下载了所有包含不同CSS文件的主题。我需要为应用程序动态声明CSS以应用该主题 我有文件名Theme1.css、Theme2.css、Theme3.css、Theme4.css、Theme5.css 当我点击Theme 1按钮时,我需要应用Theme1.css文件作为样式源。类似于当我点击Theme 2按钮时,我需要应用Theme2.css文件作为样式源 注意:css文件包含应用程序和应用程序组件

我需要创建一个应用程序,其中我们正在更改应用程序的样式,该样式是基于按钮单击的应用程序的主题

我已经下载了所有包含不同CSS文件的主题。我需要为应用程序动态声明CSS以应用该主题

我有文件名Theme1.css、Theme2.css、Theme3.css、Theme4.css、Theme5.css

当我点击Theme 1按钮时,我需要应用Theme1.css文件作为样式源。类似于当我点击Theme 2按钮时,我需要应用Theme2.css文件作为样式源

注意:css文件包含应用程序和应用程序组件的样式


祝你度过愉快的一天。…

我认为你必须一个接一个地循环所有控件,并在控件上设置主题。 例如。 若您将默认主题设置为红色,而按钮为红色,那个么您可以将主题更改为蓝色,然后使用控件循环将按钮颜色设置为蓝色。 也许这对你有帮助

如果你不明白我说的话,请问我


谢谢。

您必须使用eclipse/flex builder中的工具将CSS编译成SWF,以便在运行时更改样式

您还必须维护当前主题id的实例变量

这就是你要找的吗

public function switchTheme(theme:int):void {
    StyleManager.unloadStyleDeclarations("assets/styles/Theme"+currentTheme+".swf");
    StyleManager.loadStyleDeclarations("assets/styles/Theme"+theme+".swf");
    this.currentTheme = theme;
}

然后将每个按钮的单击处理程序分配给switchTheme函数——将主题id作为参数传递

您需要将CSS文件编译为SWF。您可以右键单击FlashBuilder浏览器窗口中的CSS文件,然后从菜单中选择CompileCSS to SWF

然后使用StyleManager中的loadStyleDeclarations方法加载带有CSS信息的SWF文件

上一步仅将新样式添加到样式子系统。如果要清除旧样式,首先需要unloadStyleDeclarations方法

如果卸载当前活动的CSS声明,请使用false作为第二个参数,以便StyleManager不会使样式无效,并为stage上的组件重建样式声明链/缓存。这不仅会很慢,而且会导致在应用新样式之前使用默认样式刷新屏幕

您可以使用类似于此的内容,并在需要更改主题时使用适当的url调用applyTheme'url/to/theme.swf':

private var currentThemeURL:String = 'themes/default.swf';

public function applyTheme(themeURL:String):void
{
    StyleManager.unloadStyleDeclarations(currentThemeURL, false);

    StyleManager.loadStyleDeclarations(themeURL);
    currentTheme = themeURL;
}

嗨,Manoj,当用户点击按钮时,我不需要改变主题。首先理解问题,然后回答。嗨,萨加尔·拉瓦尔,我的解决方案也对你有帮助。请尝试循环所有控制,然后问我是否有任何问题。这也有助于我。。。很好的解决方案Manoj SavaliaHi Roy,谢谢你的回答。但仍然面临着问题。当我调用unloadStyleDeclaration方法时,它会给我一个异常。总之,它不起作用。@SagarRawal,如果你告诉我异常情况,也许我能帮上忙。我收到了错误:TypeError:error 1009:无法访问空对象引用的属性或方法。在StyleManagerImpl.as的900行上,我正在使用FLEX SDK 3.4…您确实在函数上方的某个地方初始化了变量currentTheme,对吗?