首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComboBox下拉伸缩不遵循DisplayList

ComboBox下拉伸缩不遵循DisplayList
EN

Stack Overflow用户
提问于 2010-01-14 06:33:57
回答 3查看 1K关注 0票数 0

我一直在开发一个应用程序(使用ComboBoxes),它需要根据屏幕分辨率缩放整个应用程序。我以为这只需要更改顶层应用程序的"scaleX“和"scaleY”属性,但发现ComboBox下拉列表似乎没有相应的缩放,如以下示例所示:

代码语言:javascript
复制
<?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>

我能做的最好的事情就是在ComboBox上添加一个"MouseEvent.MOUSE_DOWN“监听器,并像这样处理它:

代码语言:javascript
复制
var comboBox:ComboBox = event.currentTarget as ComboBox;
comboBox.dropdown.scaleX = 5; comboBox.dropdown.scaleY = 5;

这会导致下拉列表显示(向下滑动)未缩放,直到它达到其扩展长度,并在该点停止缩放,并保持该比例,直到它关闭。我还发现,如果您在comboBox或dropdown上调用"invalidateDisplayList()“,那么它将取消缩放,因此无论何时调用updateDisplayList,dropdown似乎只应用其父组合框的缩放,而不应用组合框的父容器的缩放。

我知道,作为一个弹出窗口,下拉菜单不在应用程序或组合框的displayList树中,这似乎是问题的根源(没有双关语的意思)。

有人对如何解决这个问题有什么见解吗?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2010-01-14 07:46:52

一种选择是使用工厂来生成下拉列表,如下所示:

代码语言:javascript
复制
    <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组件。

票数 1
EN

Stack Overflow用户

发布于 2011-04-23 22:25:01

不是完美的,但至少是一种解决方案。将打开的事件添加到您的组合框,以便缩放到parentApplication。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-11-24 06:03:51

您可以尝试使用monkeypatching Flex SDK :)

将mx.controls.Combobox复制到您的项目并更改行1507-1509:

代码语言:javascript
复制
var m:Matrix = transform.concatenatedMatrix;
_dropdown.scaleX = m.a; //scale x
_dropdown.scaleY = m.d; //scale y

类似这样的东西:

代码语言:javascript
复制
_dropdown.scaleX = scaleX;
_dropdown.scaleY = scaleY;

不幸的是,你不得不从mx.styles.metadata中复制一些类(谁在SDK中使用了"include“,是谁?!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2060812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档