如何在运行时更改组合框的样式属性 - textInputStyleName?
问题描述:
我有一个提示字符串显示在我的组合框 - 这需要显示在斜体。当用户从列表中进行任何选择时 - 我需要更改显示内容的样式。如何在运行时更改组合框的样式属性 - 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的更改未得到应用。任何帮助,将不胜感激。
答
您应该将样式分配给内部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", "");
}
}
答
谢谢:)我能得到它的子类组合框如你所说的工作。更新我的CSS中的textInputStyleName将是一个更清洁的解决方案,因为这是一个巨大的现有应用程序,现在我必须进入几个MXML并更改控件来使用自定义控件 - im猜测这是flex中的错误?
无论如何,感谢您的帮助!
不是我的专业领域。它看起来并不像你有这个设置正确的,但。您不希望将styleName更改为字符串。你想改变它的CSS参考。尝试从setStyle方法中删除引号:promptBox.setStyle(“styleName”,withoutPrompt); – JeffryHouser 2011-03-18 13:13:23