2012-06-13 3 views
0

Задача Flex Actionscript.выпадающий список перемещение calloutbutton

У меня есть кнопка вызова, которая перемещается по экрану. Когда я открываю выпадающий список (одним щелчком мыши), он остается в том же положении на экране (только стрелка перемещается). Он не соответствует позиции calloutbutton

Я бы хотел, чтобы это выпадающее меню выполняло положение кнопки callout, когда оно переместилось (как и при нажатии кнопки снова, когда оно переместилось).

Я попытался отправить MouseEvent.CLICK. Это не работает. Пробовал также открыть, затем закрыть всплывающее окно с actioncript sing closeDropDown() и openDropDown(). Без изменений.

Благодаря

Пример кода (вызов Init() из creationComplete):

creationComplete="init();"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 
     import flash.events.MouseEvent; 

     import mx.events.DropdownEvent; 

     private function init():void { 
      var minuteTimer:Timer = new Timer(1*1000); 
      minuteTimer.addEventListener(TimerEvent.TIMER, updateCalloutPosition); 
      // starts the timer ticking 
      minuteTimer.start();     
     } 

     private function updateCalloutPosition(event:Event):void { 
      myButton.closeDropDown(); 
      myButton.x = this.width * Math.random(); 
      myButton.y = this.height * Math.random(); 
//    myButton.openDropDown(); 
      myButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK)); 
     } 

     protected function myButton_clickHandler(event:MouseEvent):void 
     { 
      if (myButton.isPopUp) { 
       myButton.closeDropDown(); 
      } 
      else { 
       myButton.openDropDown(); 
      } 
     } 

    ]]> 
</fx:Script> 
<s:CalloutButton id="myButton" click="myButton_clickHandler(event)"> 
</s:CalloutButton> 
+0

Поделитесь некоторым кодом. Я уверен, что всплывающее окно вызова расположено на основе расположения кнопок CallOut. Если кнопка движется, вам также придется перемещать всплывающее окно с использованием той же формулы. – JeffryHouser

+0

ОК, я добавил код. Даже если вы удалите обработчик кликов, он не будет следовать за кнопкой. – user1453149

+0

Ничто в коде не пытается переместить всплывающее окно при перемещении кнопки. Я не уверен, как получить доступ к всплывающему окну напрямую, это не очевидно из API CalloutButton. Возможно, вам придется расширить компонент, или вы можете попробовать открыть и закрыть всплывающее окно [есть методы для этого]. – JeffryHouser

ответ

0

Я пробовал некоторые обходной путь, но openDuration и closeDuration не работает для DropDownList, если это может быть достигнуто, чем следующий код может помочь вы. Надеюсь, что следующий код вам поможет.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
       creationComplete="init()"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
     <s:ArrayCollection id="ac"> 
      <fx:String>AK</fx:String> 
      <fx:String>AL</fx:String> 
      <fx:String>AR</fx:String> 
     </s:ArrayCollection> 
    </fx:Declarations> 
    <fx:Style> 
     @namespace s "library://ns.adobe.com/flex/spark"; 
     @namespace mx "library://ns.adobe.com/flex/halo"; 

     s|DropDownList { 
      openDuration: 0; 
      closeDuration: 0; 
     } 
    </fx:Style> 
    <fx:Script> 
     <![CDATA[ 
      import flash.events.MouseEvent; 

      import spark.components.supportClasses.DropDownListBase; 
      import spark.components.supportClasses.TextBase; 
      import spark.events.DropDownEvent; 
      import spark.skins.spark.DropDownListSkin; 
      import spark.utils.LabelUtil; 

      private var storeVisible:Boolean = false; 

      private function init():void { 
       var minuteTimer:Timer = new Timer(1*1000); 
       minuteTimer.addEventListener(TimerEvent.TIMER, updateCalloutPosition); 
       minuteTimer.start();     
      } 

      private function updateCalloutPosition(event:Event = null):void { 
       myButton.x = this.width * Math.random(); 
       myButton.y = this.height * Math.random(); 
       if(myButton.isDropDownOpen) 
       { 
        myButton.closeDropDown(false); 
        storeVisible = true; 
       } 
      } 

      private function updateComp():void 
      { 
       if(storeVisible) 
       { 
        myButton.openDropDown(); 
        storeVisible = false; 
       } 
      } 

     ]]> 
    </fx:Script> 

    <s:DropDownList id="myButton" selectedIndex="0" dataProvider="{ac}" updateComplete="updateComp()"/> 
</s:Application> 
Смежные вопросы