Apache flex 如何在运行时更改组合框的样式属性-textInputStyleName?

Apache flex 如何在运行时更改组合框的样式属性-textInputStyleName?,apache-flex,actionscript-3,flex3,Apache Flex,Actionscript 3,Flex3,我有一个提示字符串要显示在我的组合框中-这需要以斜体显示。当用户从列表中进行任何选择时,我需要更改显示内容的样式 我的css文件: .promptStyle { fontStyle: italic; } ComboBox.withPrompt { color: #FF0000; fontWeight: normal; textInputStyleName: promptStyle; } .regularStyle { fontStyle: normal;

我有一个提示字符串要显示在我的组合框中-这需要以斜体显示。当用户从列表中进行任何选择时,我需要更改显示内容的样式

我的css文件:

.promptStyle
{
    fontStyle: italic;
}
ComboBox.withPrompt
{
    color: #FF0000;
    fontWeight: normal;
    textInputStyleName: promptStyle;
}
.regularStyle
{
    fontStyle: normal;
}
ComboBox.withoutPrompt
{
    color: black;
    fontWeight: normal;
    textInputStyleName: regularStyle;
}
我的MXML文件:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
            minWidth="955" minHeight="600" initialize="init()">

<mx:Script>
    <![CDATA[
        [Bindable]
        private var content:Array=new Array("Red", "Blue", "Green");

        private function init():void {
            StyleManager.loadStyleDeclarations("combos/combo_style.swf");
        }

        private function changeStyle():void {
            var index:int = promptBox.selectedIndex;
            if(index != -1)
                promptBox.setStyle("styleName","withoutPrompt");
        }
    ]]>
</mx:Script>

<mx:ComboBox id="promptBox" prompt="Select a color" dataProvider="{content}"
        styleName="withPrompt" change="changeStyle()"/>
</mx:Application>


我能看到风格的变化,因为颜色的变化;但是特定于textInputStyleName的更改没有得到应用。任何帮助都将不胜感激。

您应该将样式分配给内部
TextInput
子组件,但为此,您必须派生自己的
PromptingComboBox
来访问受保护的属性

我认为下面的课程基本上是你想要的,应该给你一个想法:

public class PromptingComboBox extends ComboBox implements IFactory
{
    private var _dropDown: List = null;

    public function PromptingComboBox()
    {
        super.dropdownFactory = this;
    }

    public function newInstance(): *
    {
        _dropDown = new List();
        _dropDown.addEventListener(ListEvent.CHANGE, onChangeDropDownList);
        return _dropDown;
    }

    override protected function createChildren():void
    {
        super.createChildren();
        this.textInput.setStyle("fontStyle", "italic");
    }

    private function onChangeDropDownList(event: Event): void
    {
        this.textInput.setStyle("fontStyle", "");
    }
}

您应该将样式分配给内部
TextInput
子组件,但为此,您必须派生自己的
PromptingComboBox
来访问受保护的属性

我认为下面的课程基本上是你想要的,应该给你一个想法:

public class PromptingComboBox extends ComboBox implements IFactory
{
    private var _dropDown: List = null;

    public function PromptingComboBox()
    {
        super.dropdownFactory = this;
    }

    public function newInstance(): *
    {
        _dropDown = new List();
        _dropDown.addEventListener(ListEvent.CHANGE, onChangeDropDownList);
        return _dropDown;
    }

    override protected function createChildren():void
    {
        super.createChildren();
        this.textInput.setStyle("fontStyle", "italic");
    }

    private function onChangeDropDownList(event: Event): void
    {
        this.textInput.setStyle("fontStyle", "");
    }
}
谢谢:)我可以按照你的建议,通过对ComboBox进行分类来让它工作。在我的css中更新textInputStyleName对我来说是一个更干净的解决方案,因为这是一个巨大的现有应用程序,现在我必须进入几个MXML并将控件更改为使用自定义控件-我猜这是flex中的一个bug

无论如何,谢谢你的帮助

谢谢:)我按照你的建议对ComboBox进行了分类,使它能够正常工作。在我的css中更新textInputStyleName对我来说是一个更干净的解决方案,因为这是一个巨大的现有应用程序,现在我必须进入几个MXML并将控件更改为使用自定义控件-我猜这是flex中的一个bug


无论如何,谢谢你的帮助

不是我的专长领域。但看起来你的设置不对。您不想将样式名更改为字符串。您想将其更改为CSS引用。尝试从setStyle方法中删除引号:promptBox.setStyle(“styleName”,withoutPrompt);不是我的专长领域。但看起来你的设置不对。您不想将样式名更改为字符串。您想将其更改为CSS引用。尝试从setStyle方法中删除引号:promptBox.setStyle(“styleName”,withoutPrompt);