Установка цвета текста для spark.components.Label - PullRequest
4 голосов
/ 17 ноября 2011

У меня есть очень простой пользовательский компонент, состоящий из двух меток : _left и _right .

Он должен представлять несколько видов очков в игре: 1.2.3.4.5. 6

Последнее число («6» в приведенном выше примере) должно быть выделено жирным шрифтом, если оно только что изменилось (в текущем раунде игры), в противном случае все числа должны выглядеть одинаково.

Также последнее число должно быть красным или зеленым (в зависимости от того, является ли это «плохим» или «хорошим» счетом).

Вот мой исходный код ScoreLabel.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:HGroup 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    gap="0">

    <fx:Script>
        <![CDATA[
            public function setText(str:String, changed:Boolean=false):void {
                if (!changed) {
                    _right.text = '';
                    _left.text = str;
                    return;
                }

                var array:Array = str.split('.');
                _right.text = array.pop();
                _left.text = array.join('.') + '.';
            }

            public function setColor(n:uint):void {
                _right.setStyle('color', n);
                trace('setColor: ' + n);
            }
        ]]>
    </fx:Script>

    <s:Label id="_left" width="100%" textAlign="right"/>
    <s:Label id="_right" width="25" fontWeight="bold" color="#006600"/>

</s:HGroup>

Моя проблема: когда я вызываю myLabel.setColor (0xFF0000); текст не меняется на красный, а остается по умолчанию зеленым цветом - даже если я вижу следы в отладчике.

Есть идеи, пожалуйста, почему цвет не меняется?

Также я знаю, что могу изменить вышеуказанный компонент на:

    private var _color:uint;

    <s:Label id="_right" width="25" fontWeight="bold" color="{_color}"/>

и измените этот _color член, но я бы предпочел не вводить еще одну привязку данных, потому что в моем приложении будет много ScoreLabel:

screenshot

(как вы видите выше, все цифры зеленые - даже если setColor (0xFF0000) был вызван 3 раза).

1 Ответ

8 голосов
/ 23 августа 2012

Похоже, что без неявного преобразования в Label Flash Builder Premium 4.6 просто не будет компилироваться, поскольку в нем говорится следующее:

Несколько маркеров в этой строке: -labelDisplay -1061: вызовв возможно неопределенный метод setStyle через ссылку со статическим типом spark.core: IDisplayText.

Если вы измените:

_right.setStyle('color', n);

на это:

(_right as Label).setStyle('color', n);

это должно работать.

...