Как изменить свойство стиля - textInputStyleName комбинированного списка во время выполнения? - PullRequest
1 голос
/ 18 марта 2011

У меня есть строка приглашения, которая будет отображаться в моем поле со списком - это должно отображаться в курсив .Когда пользователь делает какой-либо выбор из списка - мне нужно изменить стиль отображаемого контента.

Мой 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, не применяется.Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Вы должны назначить стиль внутреннему подкомпоненту 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 голосов
/ 22 марта 2011

Спасибо :) Я смог заставить его работать, подклассифицируя ComboBox, как вы предложили.Обновление textInputStyleName в моем css было бы намного более чистым решением для меня, поскольку это огромное существующее приложение, и теперь мне нужно войти в несколько MXML и изменить элемент управления, чтобы вместо него использовать пользовательский элемент управления - я предполагаю, что это ошибка в flex?

В любом случае, спасибо за вашу помощь!

...