2011-03-18 92 views
1

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

我的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的更改未得到应用。任何帮助,将不胜感激。

+0

不是我的专业领域。它看起来并不像你有这个设置正确的,但。您不希望将styleName更改为字符串。你想改变它的CSS参考。尝试从setStyle方法中删除引号:promptBox.setStyle(“styleName”,withoutPrompt); – JeffryHouser 2011-03-18 13:13:23

回答

1

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

我觉得下面的类确实基本上你想要什么,应该给你一个想法:

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", ""); 
    } 
} 
0

谢谢:)我能得到它的子类组合框如你所说的工作。更新我的CSS中的textInputStyleName将是一个更清洁的解决方案,因为这是一个巨大的现有应用程序,现在我必须进入几个MXML并更改控件来使用自定义控件 - im猜测这是flex中的错误?

无论如何,感谢您的帮助!