1

我还有一个“我该怎么做”的问题 :) 假设我有一个组件并想在运行时更改它的焦点颜色。这是给你的一个例子(我已经排除了任何按钮等以防止组件失去焦点,因为在这种情况下它会完美地改变它的颜色):

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="init()">
    <mx:Script><![CDATA[    
        private function init():void {
            //putting focus inside needed component
            focusTest.setFocus();
            focusTest.setSelection(0, 0);

            // creates a new Timer
            var minuteTimer:Timer = new Timer(1000, 30);

            // designates listeners for the interval and completion events
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

            // starts the timer ticking
            minuteTimer.start();
        }    
        public function onTick(event:TimerEvent):void {
            // displays the tick count so far
            trace("tick " + event.target.currentCount);
            if (focusTest.getStyle('focusColor') != 0x008CEA) {
                focusTest.setStyle('focusColor', 0x008CEA);
            } else {
                focusTest.setStyle('focusColor', 0xFF0000);
            }
            //Update everything somehow :)            
        }    
        public function onTimerComplete(event:TimerEvent):void {
            trace("Time's Up!");
        }            
        ]]></mx:Script>
    <mx:TextInput id="focusTest"/>
</mx:Application>

我有什么:计时器在滴答作响。该属性正在发生变化(您可以看到,例如,在浏览器中切换选项卡时......当颜色发生变化时,只需捕捉正确的状态)。

我想要什么:如何在没有魔法的情况下重绘这个焦点(我已经尝试了所有方法,从“ validate”开始,我尝试过调用updateDisplayList()整个应用程序,我尝试过调用styleChanged... aggrrh ..我没有想法:))。

有什么想法吗?

任何帮助,像往常一样,非常感谢:)

4

1 回答 1

1

如果你使用它themeColorfocusTest.drawColor(true)它工作正常。你必须使用 drawFocus() 来重新着色,我不认为 focusColor 是 Fl​​ex 3 的 setStyle 属性(仅在 Flex 4 中使用)。

很难发现,因为如果你使用了不正确的 setStyle/getStyle 属性,Flex 不会抛出任何错误,它只会忽略它们!

    if (focusTest.getStyle('themeColor') != 0x008CEA) {
        focusTest.setStyle('themeColor', 0x008CEA);
    } else {
       focusTest.setStyle('themeColor', 0xFF0000);
    } 
   focusTest.drawFocus(true);

完整代码:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="init()">
    <mx:Script><![CDATA[    
        private function init():void {
            //putting focus inside needed component
            focusTest.setFocus();
            focusTest.setSelection(0, 0);

            // creates a new Timer
            var minuteTimer:Timer = new Timer(1000, 30);

            // designates listeners for the interval and completion events
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

            // starts the timer ticking
            minuteTimer.start();
        }    
        public function onTick(event:TimerEvent):void {
            // displays the tick count so far
            // displays the tick count so far

            trace("tick " + event.target.currentCount);
            if (focusTest.getStyle('themeColor') != 0x008CEA) {
                focusTest.setStyle('themeColor', 0x008CEA);
            } else {
                focusTest.setStyle('themeColor', 0xFF0000);
            }

            focusTest.drawFocus(true);
            //Update everything somehow :)             
        }    
        public function onTimerComplete(event:TimerEvent):void {
            trace("Time's Up!");
        }            
    ]]></mx:Script>
    <mx:TextInput id="focusTest" width="222"/>
</mx:Application>
于 2011-03-23T14:28:24.473 回答