更改下拉列表的默认宽度和高度

时间:2011-04-19 11:02:34

标签: flex flex4

我想要一个足够宽的下拉列表来容纳主控件显示区域下拉列表中的较大项目。(即具有MX Combobox功能的下拉列表) 请指导我。

6 个答案:

答案 0 :(得分:3)

这会将下拉宽度调整为数据宽度。 我忘记了示例是从哪里得到代码。可以通过rowCount设置高度我相信。

package valueObjects.comboBox{

    import flash.events.Event;
    import mx.controls.ComboBox;
    import mx.core.ClassFactory;
    import mx.core.IFactory;
    import mx.events.FlexEvent;

    public class ExtendedComboBox extends ComboBox{
        private var _ddFactory:IFactory = new ClassFactory(ExtendedList);

        public function ExtendedComboBox(){    
            super();
        }
        override public function get dropdownFactory():IFactory{
            return _ddFactory;
        }
        override public function set dropdownFactory(factory:IFactory):void{
            _ddFactory = factory;
        }
        public function adjustDropDownWidth(event:Event=null):void{    

        this.removeEventListener(FlexEvent.VALUE_COMMIT,adjustDropDownWidth);
            if (this.dropdown == null){
                callLater(adjustDropDownWidth);
            }else{
                var ddWidth:int = this.dropdown.measureWidthOfItems(-1,this.dataProvider.length);
                if (this.dropdown.maxVerticalScrollPosition > 0){                    
                    ddWidth += ExtendedList(dropdown).getScrollbarWidth();                    
                }                
                this.dropdownWidth = Math.max(ddWidth,this.width);                
            }
        }
        override protected function collectionChangeHandler(event:Event):void{
            super.collectionChangeHandler(event);
            this.addEventListener(FlexEvent.VALUE_COMMIT,adjustDropDownWidth);        
        }
    }
}



package valueObjects.comboBox{
    import mx.controls.List;

    public class ExtendedList extends List{
        public function ExtendedList(){
            super();
        }
        public function getScrollbarWidth():int{
            var scrollbarWidth:int = 0;
            if (this.verticalScrollBar != null){
                scrollbarWidth = this.verticalScrollBar.width;
            }
            return scrollbarWidth;
        }

    }
}




<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" mlns:comboBox="valueObjects.comboBox.*" >

  <comboBox:ExtendedComboBox labelField="data.totext()" itemRenderer="mx.controls.Label" />
</mx:Canvas>

答案 1 :(得分:2)

您应该创建自定义DropDownList(扩展原始版本)并覆盖dataProvider setter和measure()方法。在dataProvider setter中,您应该调用invalidateSize(),并且您应该迭代数据提供程序并找到最大的标签(您可以为标签指定新文本并比较它们的宽度)。

答案 2 :(得分:2)

要增加组合框下拉列表的高度,请使用“rowCount”属性。这适用于Flex 3.6.0

答案 3 :(得分:1)

从Flex示例中查看this example。您只需为DropDownList创建外观并设置popUpWidthMatchesAnchorWidth="false"属性。

答案 4 :(得分:1)

通过以下代码实现:

public override function set dataProvider(value:IList):void
    {

        var length:Number = 0;
        var array:Array = value.toArray();
        super.dataProvider = value;
        var labelName:String = this.labelField;
        var typicalObject:Object =new Object();
        for each(var obj:Object in array)
        {
            var temp:Number = obj[labelName] .length;
            if( length < temp )
            {

                length = temp;
                Alert.show(" length  "+length.toString());
                typicalObject = obj;
            }
            //length = length < Number(obj[labelName].length) ? Number(obj[labelName].length) : length
            //Alert.show(obj[labelName].length);
            this.typicalItem = typicalObject;
        }



    }

答案 5 :(得分:0)

抱歉,最好从现场取下宽度和高度。