我正在嘗試創建一個將垂直調整大小以確保所有呈現器都完整顯示的數據網格。此外,Flex - 自動調整大小的數據網格的問題
- 渲染器是可變的高度
- 渲染器可以調整自己
一般來說,事件的流程如下:
- 一個項目渲染器自身的大小(通常是響應用戶點擊等)
- 它調度父數據網格拾取的冒泡事件
- DataGrid嘗試調整大小以確保所有渲染器保持全部可見。
我目前使用在DataGrid中此代碼來計算高度:
height = measureHeightOfItems(0, dataProvider.length) + headerHeight;
這似乎得到一個不正確的高度。我已經嘗試了一些變體,包括callLater(以確保調整大小已完成,因此度量可以正常工作),並重寫meausre()並調用invalidateSize()/ validateSize(),但都不起作用。
下面是3類將說明問題。單擊項目渲染器中的按鈕可調整渲染器的大小。網格也應該展開,以便全部顯示所有3個渲染器。
任何建議將不勝感激。
問候
瑪蒂
DataGridProblem.mxml(應用程序文件)
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
xmlns:view="view.*">
<mx:ArrayCollection id="dataProvider">
<mx:String>Item A</mx:String>
<mx:String>Item B</mx:String>
<mx:String>Item C</mx:String>
</mx:ArrayCollection>
<view:TestDataGrid
id="dg"
dataProvider="{ dataProvider }"
width="400">
<view:columns>
<mx:DataGridColumn dataField="text" />
<mx:DataGridColumn itemRenderer="view.RendererButton" />
</view:columns>
</view:TestDataGrid>
</mx:Application>
view.TestDataGrid.as
package view
{
import flash.events.Event;
import mx.controls.DataGrid;
import mx.core.ScrollPolicy;
public class TestDataGrid extends DataGrid
{
public function TestDataGrid()
{
this.verticalScrollPolicy = ScrollPolicy.OFF;
this.variableRowHeight = true;
this.addEventListener(RendererButton.RENDERER_RESIZE , onRendererResize);
}
private function onRendererResize(event : Event) : void
{
resizeDatagrid();
}
private function resizeDatagrid():void
{
height = measureHeightOfItems(0, dataProvider.length) + headerHeight;
}
}
}
view.RendererButton.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Button width="50" height="50"
click="onClick()" />
<mx:Script>
<![CDATA[
public static const RENDERER_RESIZE : String = "resizeRenderer";
private function onClick() : void
{
this.height += 20;
dispatchEvent(new Event(RENDERER_RESIZE , true));
}
]]>
</mx:Script>
</mx:HBox>
......哦,有一種方法可以工作。 – DyreSchlock 2010-11-09 16:22:05