2011-04-19 4 views

답변

2

당신은 사용자 정의 DropDownList로 (원래 확장)를 만들고 dataProvider 세터와 measure() 메소드를 오버라이드 (override)합니다. dataProvider 세터에서는 invalidateSize()을 호출해야하며 데이터 제공 업체를 반복하여 가장 큰 라벨 (라벨에 새 텍스트를 할당하고 너비를 비교할 수 있음)을 찾아야합니다.

+0

나도 sameway에서 생각했다. 그러나 나의 상사는이 bahaviour.so를 달성하기 위해 anyother 자산을 발견 할 것을 나에게 말했다. 이것에 관해 나를 안내 해주세요 – vengatesh

+1

그것은 그것을 달성하기 위해 기존의 속성을 조정할 방법이없는 것 같습니다. 죄송합니다. – Constantiner

+0

오,이 문제에 대해 저에게 많은 도움을 주신 것에 감사드립니다. – vengatesh

1

Flex 예제의 this example을 확인하십시오. DropDownList에 대한 스킨을 만들고 popUpWidthMatchesAnchorWidth="false" 속성을 설정하기 만하면됩니다.

+0

그래, 나는 주어진 컨셉을 시도했다. 그러나 우리가 콤보 박스의 너비와 높이를 지정하지 않으면 플렉스 3에서 콤보 박스의 폭은 더 큰 엘레멘트를 수용 할만큼 충분히 넓다. 드롭 다운 목록에. 이제 flex 4에서 별도의 드롭 다운 목록 컨트롤을 사용합니다. 드롭 다운 목록의 너비와 높이를 지정하지 않으면 112 픽셀을 너비 (기본 너비)로 사용합니다. 내 요구 사항은, 만약 내가 드롭 다운 목록의 너비와 높이를 지정하지 않으면, 그것의 팝업에 큰 내용을 수용 할 수있을만큼 넓어야합니다. 이 요구 사항에 대해 저를 제안하십시오. – vengatesh

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> 
+0

플렉스 3에서는 콤보 상자의 너비와 높이를 지정하지 않으면 콤보 상자의 너비가 드롭 다운 목록의 큰 요소를 수용 할만큼 충분히 넓습니다. 이제 flex 4에서 별도의 드롭 다운 목록 컨트롤을 사용합니다. 드롭 다운 목록의 너비와 높이를 지정하지 않으면 112 픽셀을 너비 (기본 너비)로 사용합니다. 내 요구 사항은, 만약 내가 드롭 다운 목록의 너비와 높이를 지정하지 않으면, 그것의 팝업에 큰 내용을 수용 할 수있을만큼 넓어야합니다. 이 질문에 나를 제발 제안하십시오 – vengatesh

+0

정확히 내 대답에 게시 된 클래스 파일을 않습니다. 아직 사용 해본 적이 있습니까? –

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



    } 
0

죄송합니다, 더 나은 분야에서 폭과 높이를 모두 벗어.

+0

미안 해요 그것은 작동하지 않습니다 – vengatesh

+0

높이와 너비를 제거하면 기본 높이와 너비 속성이 적용됩니다 드롭 다운 목록 – vengatesh

2

콤보 상자의 드롭 다운 목록 높이를 높이려면 "rowCount" 속성을 사용하십시오. 이것은 플렉스 3.6.0

관련 문제