我想要一個足夠寬的下拉列表,以便在主控件的顯示區域的下拉列表中容納更大的項目。(。也就是MX Combobox功能的下拉列表) 請指導我在這。changin下拉列表的默認寬度和高度
回答
您應該創建自定義的DropDownList(延長原),並覆蓋dataProvider
setter和measure()
方法。在dataProvider
setter中,您應該調用invalidateSize()
,並且應該重複您的數據提供程序並查找最大標籤(您可以將新文本分配給標籤並比較它們的寬度)。
從Flex示例檢出this example。您只需爲DropDownList
創建一個外觀並設置popUpWidthMatchesAnchorWidth="false"
屬性。
是的我已經嘗試了給定的概念。但在flex 3中,如果我們沒有指定組合框的寬度和高度,那麼組合框的寬度足夠寬以容納較大的元素在下拉列表中。現在我們在flex 4中有單獨的下拉列表控件。如果我們沒有指定寬度和高度作爲下拉列表,那麼它將佔用112像素寬度(默認寬度)。我的要求是,如果我沒有指定下拉列表的寬度和高度,它應該足夠寬以容納其彈出窗口中較大的內容。請在這個要求上給我建議。 – vengatesh 2011-04-20 05:48:37
這將調整下拉寬度到數據寬度。 我忘記了哪裏的例子是我從哪裏得到的代碼。我相信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>
Flex 3中,如果我們不指定組合框的寬度和高度,則組合框的寬度足夠寬,以容納在下拉列表較大元件。現在我們在flex 4中有單獨的下拉列表控件。如果我們沒有指定寬度和高度作爲下拉列表,那麼它將佔用112像素寬度(默認寬度)。我的要求是,如果我沒有指定下拉列表的寬度和高度,它應該足夠寬以容納其彈出窗口中較大的內容。請在此建議我 – vengatesh 2011-04-20 05:49:17
這正是我在答案中發佈的類文件所做的。你甚至嘗試過使用它們嗎? – 2011-04-20 17:19:28
它是通過下面的代碼來實現的:
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;
}
}
要增加組合框下拉列表的高度,請使用「rowCount」屬性。這是用於Flex 3.6.0
- 1. IFrame的默認寬度/高度
- 2. ImageFlow顯示默認寬度高度
- 3. Cordova mac默認窗口高度寬度
- 4. 每個設備的默認iOS控件高度和寬度列表?
- 5. 默認的寬度和高度的視圖與wrap_content
- 6. 如何更改ATL控件的默認寬度和高度?
- 7. 內部形式的默認高度和寬度
- 8. Wordpress替換圖像的默認寬度和高度值
- 9. ckeditor-ckfinder上傳圖像的默認屬性(寬度和高度)
- 10. KendoUI設置下拉列表的寬度
- 11. 下拉菜單和下拉列表寬度不完全對齊
- 12. 控制下拉列表框寬度
- 13. 高度和寬度
- 14. 默認UIPickerView高度
- 15. Iframe默認高度
- 16. ImageButton的高度和寬度
- 17. 下拉列表默認值
- 18. 全寬度下拉
- 19. AutoCompleteBox下拉寬度
- 20. 下拉寬度即
- 21. 2列,最小寬度和100%高度
- 22. 設置默認寬度和最小寬度屬性
- 23. Android |獲取屏幕高度,寬度和屏幕寬度,高度
- 24. 規模表在寬度和高度
- 25. dojo圖表高度和寬度問題
- 26. autoresizingmask高度和寬度
- 27. Youtube寬度和高度
- 28. libgdx optimal高度和寬度
- 29. setBound寬度和高度
- 30. 獲取高度和寬度
我也同樣認爲,但我的老闆告訴我找到其他任何財產來實現這個bahaviour.so請引導我關於這個 – vengatesh 2011-04-20 09:08:28
似乎沒有辦法調整現有的屬性來實現它。抱歉。 – Constantiner 2011-04-20 09:13:16
噢,非常感謝您幫助我解決這個問題。 – vengatesh 2011-04-20 10:30:08