Flex在运行时更改css属性

Flex在运行时更改css属性,css,apache-flex,flex-spark,spark-skinning,Css,Apache Flex,Flex Spark,Spark Skinning,我正在用flex开发一个仪表板应用程序,它是。这里有多个显示不同内容的面板。我想要的是,每当用户点击任何特定的面板时,比如说“年收入”,那么我只想突出显示该特定面板 因此,基本上所有处于初始状态的面板都将处于“非活动”状态,但一旦用户单击它,它将变为活动状态,从而为用户提供更好的体验,让用户知道他正在使用“xyz”面板,其余面板将处于非活动状态 所以我所说的“活动”和“非活动”状态的意思是,在任何HTML页面中,当我们将鼠标悬停在任何超链接上时,它会变成“蓝色”(例如),所以我将其称为活动和非活

我正在用flex开发一个仪表板应用程序,它是。这里有多个显示不同内容的面板。我想要的是,每当用户点击任何特定的面板时,比如说“年收入”,那么我只想突出显示该特定面板

因此,基本上所有处于初始状态的面板都将处于“非活动”状态,但一旦用户单击它,它将变为活动状态,从而为用户提供更好的体验,让用户知道他正在使用“xyz”面板,其余面板将处于非活动状态

所以我所说的“活动”和“非活动”状态的意思是,在任何HTML页面中,当我们将鼠标悬停在任何超链接上时,它会变成“蓝色”(例如),所以我将其称为活动和非活动

现在,谈谈小组

面板具有定义其布局的蒙皮。为了满足我的要求,我尝试将“css”应用于面板。现在我以这种方式应用了css

 public class Pod extends Panel
    {
      ...properties
         public function init():void
         {
             setStyle('styleName',"panelOff"); 
         }
    }
现在,在这个类中,我处理面板上的“点击”。因此,在点击事件中,我所做的基本上是

setStyle('styleName',"panelOn"); 
由于面板已应用蒙皮,我需要更改蒙皮中包含的组件的属性。因此,我必须能够访问皮肤中的css属性

在皮肤文件中,我正在做类似的事情

override protected function updateDisplayList(unscaledWidth:Number,
                                                        unscaledHeight:Number):void
{                     
    setStyle('border-alpha', hostComponent.getStyle('border-alpha'));
}
所以我的问题是,这是满足我要求的正确方式吗

如何访问皮肤中hostcomponent的css属性 上课

在我的main.mxml中,我定义了样式文件。所以如果 样式文件包含一个名为“panelOn”的样式类,如果我给出 类访问面板,以便它能够访问关联的样式 跟那个班

请不要建议使用面板的setStyle方法放置每个css属性,因为这样对我来说使用css文件没有好处,而且css样式也不好


如果有其他更好的解决方案,请分享您的观点。我希望我明白了。任何形式的帮助都将不胜感激。

满足您需求的最佳方式-使用spark states。面板组件和Mxml蒙皮有两种状态:活动和非活动(或新状态)。面板组件具有设置当前蒙皮状态的逻辑。如果您想使用css来保存属性,每个州都会为皮肤应用自己的样式名

主要用途:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
               xmlns:classes="classes.*">
    <fx:Style>
        @namespace s "library://ns.adobe.com/flex/spark";
        @namespace mx "library://ns.adobe.com/flex/mx";
        @namespace classes "classes.*";

        classes|Pod
        {
            skinClass : ClassReference("skins.PodSkin");
        }

        .active
        {
            backgroundColor: #ff0000;
        }

        .inactive
        {
            backgroundColor: #00ff00;
        }

    </fx:Style>

    <classes:Pod x="800" width="300" height="300" />
</s:Application>
以及为每个状态设置样式名的PodSkin mxml skin的一部分:

    <s:SparkSkin 
        xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
        blendMode="normal" mouseEnabled="false" 
        styleName.active="active" styleName.inactive="inactive"
        minWidth="131" minHeight="127" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
<s:states>
    <s:State name="normal" />
    <s:State name="active" />
    <s:State name="inactive" />
    <s:State name="disabled" />
    <s:State name="normalWithControlBar" stateGroups="withControls" />
    <s:State name="disabledWithControlBar" stateGroups="withControls" />
</s:states>


享受Flex

这有点难理解-您是否在问如何访问主类中存储的样式信息?或者如何使用类选择器?嘿,谢谢你的回复。在我的mxml文件中,我没有直接创建Pod类的任何实例(我没有为此编写标记)。我正在以编程方式创建所需的POD,mxml中有一个组件是视图堆栈。因此,如果我按照您的方式操作,pod组件是否能够找到我们在块中定义的“活动”和“非活动”样式?@llya Z:非常感谢……)是的,你是对的,我编辑答案。使用mxml或as3创建组件并不重要。您应该在应用程序中加载的主应用程序类或css文件(最佳方式)中声明样式。@llya Z:“[SkinState(name=“active”)]”必须在Pod类中。
    <s:SparkSkin 
        xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
        blendMode="normal" mouseEnabled="false" 
        styleName.active="active" styleName.inactive="inactive"
        minWidth="131" minHeight="127" alpha.disabled="0.5" alpha.disabledWithControlBar="0.5">
<s:states>
    <s:State name="normal" />
    <s:State name="active" />
    <s:State name="inactive" />
    <s:State name="disabled" />
    <s:State name="normalWithControlBar" stateGroups="withControls" />
    <s:State name="disabledWithControlBar" stateGroups="withControls" />
</s:states>