2010-01-13 50 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”,谁?!)