изменить ширину и высоту выпадающего списка по умолчанию - PullRequest
1 голос
/ 19 апреля 2011

Я хочу раскрывающийся список, который достаточно широк, чтобы вместить более крупный элемент в раскрывающемся списке в области отображения основного элемента управления (т.е. раскрывающийся список с функциональностью MX Combobox), пожалуйста, сообщите мне об этом.

Ответы [ 6 ]

3 голосов
/ 20 апреля 2011

Это позволит настроить ширину раскрывающегося списка в соответствии с шириной данных. Я забыл, где пример, откуда я взял код. Я считаю, что высота может быть установлена ​​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>
2 голосов
/ 31 июля 2012

Чтобы увеличить высоту раскрывающегося списка поля со списком, используйте свойство "rowCount" .Это для Flex 3.6.0

2 голосов
/ 20 апреля 2011

Вы должны создать собственный DropDownList (расширяющий оригинал) и переопределить dataProvider setter и measure() метод. В установщике dataProvider вы должны вызывать invalidateSize(), и, в меру, вы должны выполнить итерацию вашего поставщика данных и найти самую большую метку (вы можете назначить новый текст для метки и сравнить их ширину).

1 голос
/ 20 апреля 2011

это достигается с помощью следующего кода:

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;
        }



    }
1 голос
/ 19 апреля 2011

Проверьте этот пример из примеров Flex. Вам просто нужно создать скин для DropDownList и установить свойство popUpWidthMatchesAnchorWidth="false".

0 голосов
/ 20 апреля 2011

Извините, лучше снять ширину и высоту с поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...