AdvancedDataGrid是您画布中唯一的东西吗?
我会调整AdvancedDataGrid的高度和宽度,并让Canvas处理滚动。
在画布中,重写方法的updateDisplayList,做这样的事情:
protected function updateDisplayList(unscaledWidth: Number, unscaledHeight: Number):void{
super.updateDisplayList, unscaledHeight);
this.myAdvancedDataGrid.setActualSize(this.myAdvancedDataGrid.measuredHeight, this.myAdvancedDataGrid.measuredWidth);
}
这样在AdvancedDataGrid应该没有滚动条。但是,如果它向下拉得太远或太靠右,那么滚动条就会出现在画布上。
您可能会从Flex Coordinate System上阅读。 AdvancedDataGrid是你的“内容”,而画布将是你的本地。
我正在添加一个完整的运行代码示例来演示我的建议。
这与在其内部移动AdvancedDataGrid画布组件:com.flextras.stackOverflow.CanvasWithGrid
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
this.myADG.setActualSize(this.myADG.measuredWidth, this.myADG.measuredWidth);
}
[Bindable]
private var dpFlat:ArrayCollection = new ArrayCollection([
{Region:"Southwest", Territory:"Arizona",
Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000},
{Region:"Southwest", Territory:"Arizona",
Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},
{Region:"Southwest", Territory:"Central California",
Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},
{Region:"Southwest", Territory:"Nevada",
Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},
{Region:"Southwest", Territory:"Northern California",
Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000},
{Region:"Southwest", Territory:"Northern California",
Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},
{Region:"Southwest", Territory:"Southern California",
Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000},
{Region:"Southwest", Territory:"Southern California",
Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}
]);
]]>
</fx:Script>
<mx:AdvancedDataGrid id="myADG"
initialize="gc.refresh();"> <!-- width="100%" height="100%" -->
<mx:dataProvider>
<mx:GroupingCollection id="gc" source="{dpFlat}">
<mx:grouping>
<mx:Grouping>
<mx:GroupingField name="Region"/>
<mx:GroupingField name="Territory"/>
</mx:Grouping>
</mx:grouping>
</mx:GroupingCollection>
</mx:dataProvider>
<mx:columns>
<mx:AdvancedDataGridColumn dataField="Region"/>
<mx:AdvancedDataGridColumn dataField="Territory"/>
<mx:AdvancedDataGridColumn dataField="Territory_Rep"
headerText="Territory Rep"/>
<mx:AdvancedDataGridColumn dataField="Actual"/>
<mx:AdvancedDataGridColumn dataField="Estimate"/>
</mx:columns>
</mx:AdvancedDataGrid>
</mx:Canvas>
这是主应用程序文件:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:stackOverflow="com.flextras.stackOverflow.*">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<stackOverflow:CanvasWithGrid width="200" height="200" />
</s:Application>
感谢您的响应。 当你说我开心地把它拖到最右边时,情况就是这样。无论出于何种原因,发生的事情是,画布比网格稍大,即使网格是画布内唯一的东西!正如前面提到的,我无法完全滚动的原因是因为Canvas一直滚动到左边,唯一的方法是让两个滚动条成为一条直线......什么地狱?! 任何想法为什么帆布会更大?宽度和高度都设置为100% – Craig 2010-07-23 20:41:51
AdvancedDataGrid周围可能有一些不可见的边框蒙皮。无论如何,在画布上设置horizontalScrollPolicy =“false”和verticalScrollPolicy =“false”。尽管我很欣赏www.Flextras.com其他地方,但我不会建议让画布在这里处理滚动。这会挫败ADG渲染优化并降低性能,IMO。 – Robusto 2010-07-23 20:55:24
好吧,我通过将datagrid的宽度设置为“this.width”而不是100%(在Canvas中)来解决我之前遇到的问题,所以现在我可以实际得到网格的末端。它使网格中的最后一列比现在网格中的其余列更大......对此有何想法? AdvancedDataGrid是一件可怕的事情。 – Craig 2010-07-23 21:35:32