2012-04-02 45 views
2

我的Flex 4.6網絡應用程序的用戶很少抱怨,它右下角的mx.controls.PopUpButton有時在之下打開一個列表,因此它不可用(我無法重現我自己 - 他們的Flash播放器和/或字體大小設置的可能是一個不吉利的組合)如何確保PopUp始終顯示在PopUpButton之上?帶有測試用例和屏幕截圖

我怎麼能保證,即彈出組件(對我來說這是一個spark.components.List)始終打開以上 PopUpButton?

我懷疑,我應該創建一個基於mx.skins.halo.PopUpButtonSkin的皮膚,並將其分配給我的PopUpButton?我可能應該使用PopUpPosition.ABOVE常量和PopUpAnchor一起使用?

但我不知道如何把它放在一起 - 任何人都可以請分享一些指示?

我已經準備了一個屏幕截圖和簡單Text.mxml:

enter image description here

<?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" 
    creationComplete="init()"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 
      import mx.collections.ArrayCollection; 
      import spark.components.List; 

      [Bindable] 
      private var _data:ArrayCollection = new ArrayCollection(); 

      [Bindable] 
      private var _list:List = new List(); 

      public function init():void { 
       _data.addItem({label: "One"}); 
       _data.addItem({label: "Tow"}); 
       _data.addItem({label: "Three"}); 
       _data.addItem({label: "Four"}); 
       _data.addItem({label: "Five"}); 

       _list.dataProvider = _data; 
       _list.setStyle('fontSize', 36); 
      } 
     ]]> 
    </fx:Script> 

    <mx:PopUpButton right="10" bottom="10" fontSize="24" popUp="{_list}"/> 
</s:Application> 

UPDATE:

我已經西蒙·貝利MX ComboBox Open Direction Bug - Alternative Solution,並且找到一種解決方案工作,但不幸的是,當主(不是箭頭)按鈕被點擊時,阻止我調度我的自定義事件。

而且我已經看了the PopUpButton.as source code,不知是否也許列表的高度爲0,而被檢查的話有:

private function displayPopUp(show:Boolean):void 
{ 
    ...... 
    // XXX I suspect the _popUp.height below is 0 
    // XXX for the users having the trouble 

    if (show) 
    {   
     if (point.y + _popUp.height > screen.bottom && 
      point.y > (screen.top + height + _popUp.height)) 
     { 
      // PopUp will go below the bottom of the stage 
      // and be clipped. Instead, have it grow up. 
      point.y -= (unscaledHeight + _popUp.height + 2*popUpGap); 
      initY = -_popUp.height; 
     } 

我仍然無法重現自己的錯誤,我的用戶AREN」 t非常有幫助(大多數老年人,玩my card game)。我搜索了in Adobe JIRA,但找不到這樣的錯誤。

我想知道,如果有一種方法來短路該方法來強制打開PopUpButton上方的PopUp。

或者我應該把_list到一些容器......

回答

1

PopUpButton不使用PopUpAnchor。它在名爲displayPopUp()的私有函數內部設置彈出窗口的位置。

爲什麼不使用Spark DropDownList代替?這不是你在這裏有效創造的嗎?

+0

我選擇了一個值後,我不能點擊DropDownList(「推」它像一個按鈕 - 發送一個事件) - 或者我可以嗎? – 2012-04-02 19:31:11

+0

不,我不這麼認爲。你是通過點擊右側「選擇」,然後點擊左側「推」?這似乎讓我感到困惑。但是,列表中的實際文字可能會使它更明顯地表現出它的工作原理。 – joshtynjala 2012-04-02 23:52:03

+0

是的,這正是我使用它的方式。我可以通過「覆蓋mx_internal函數displayPopUp()」來實現任何功能嗎? – 2012-04-03 12:36:10

相關問題