2010-01-13 25 views
0

我一直在研究一個應用程序(與ComboBoxes),需要根據屏幕分辨率縮放整個應用程序。我認爲這將只是需要改變「的scaleX」和「的scaleY」的頂級應用程序的性能,但發現該組合框下拉菜單沒有出現相應地擴大,如下面的例子:ComboBox下拉縮放不遵循DisplayList

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    applicationComplete="init()"> 
    <mx:Script> 
     <![CDATA[ 
     import mx.collections.ArrayCollection; 
     private var options:ArrayCollection = new ArrayCollection([1,2,3,4]); 

     public function init():void { 
      this.scaleX = 5; 
      this.scaleY = 5; 
     } 
     ]]> 
    </mx:Script> 

    <mx:ComboBox id="box" dataProvider="{this.options}"/> 
</mx:Application> 

我已經能夠用它添加上一個組合框「的MouseEvent.MOUSE_DOWN」監聽器,並處理它,像這樣做的最好的:

var comboBox:ComboBox = event.currentTarget as ComboBox; 
comboBox.dropdown.scaleX = 5; comboBox.dropdown.scaleY = 5; 

導致出現下拉列表(向下滑動)未縮放直到達到擴展len並停止在這一點上它擴大並保持在那個規模,直到它關閉。我還發現,如果您在組合框或下拉列表中調用「invalidateDisplayList()」,則它將撤消縮放,所以無論何時調用updateDisplayList,下拉列表僅應用它的父級ComboBox縮放,而不是ComboBox的父級容器的縮放。

我明白,作爲彈出窗口,下拉不在應用程序或組合框的displayList樹中,這似乎是問題的根源(無雙關語意思)。

任何人有任何見解如何解決這個問題?

在此先感謝!

回答

1

一種選擇是使用一個工廠來生成你的下拉列表中,這樣的:

<mx:ComboBox id="box" dataProvider="{this.options}"> 
     <mx:dropdownFactory> 
      <mx:Component> 
       <mx:List scaleX="5" scaleY="5"/> 
      </mx:Component> 
     </mx:dropdownFactory> 
    </mx:ComboBox> 

不知道你可能需要做出讓所有的List's組件呈現在適當的規模有什麼其他的修改。

0

不完美,但至少像解決方案。 將打開的事件添加到您的組合框中,以便縮放到parentApplication。

import mx.events.DropdownEvent; 

// workaround combox listbox scalling 
protected function mycombobox_openHandler(event:DropdownEvent):void 
{    
    mycombobox.dropdown.scaleX = parentApplication.scaleX; 
    mycombobox.dropdown.scaleY = parentApplication.scaleY;     
} 
0

您可以嘗試的Monkeypatching的Flex SDK :)
複製mx.controls.Combobox到您的項目和變更線一五零七年至1509年:

var m:Matrix = transform.concatenatedMatrix; 
_dropdown.scaleX = m.a; //scale x 
_dropdown.scaleY = m.d; //scale y 

到這樣的事情:

_dropdown.scaleX = scaleX; 
_dropdown.scaleY = scaleY; 

不幸的是,你必須從mx.styles.metadata中複製一些類(誰使用SDK中的「include」,誰?!)