2010-11-22 70 views
0

我想擴展DataGridColumn,並在擴展類中,嘗試
爲paddingLeft指定一個值,但我無法編譯它。擴展DataGridColumn並指定paddingLeft

使用Flex Builder 3:

mainApp.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 
    <mx:DataGrid x="191" y="171"> 
     <mx:columns> 
      <local:DataGridColumnExt headerText="Column 1" dataField="col1"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

DataGridColumnExt.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridColumn xmlns="*" xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="10"> 
</mx:DataGridColumn> 

錯誤,我得到:通過基準可能未定義的屬性styleDeclaration的
訪問與靜態類型DataGridColumnExt。 [生成的代碼(使用-keep保存):路徑:DataGridColumnExt-generated.as,行:68,列:13] DataGridColumnWithLeftPadding未知1290353024334 24677

回答

2

你不需要爲了延長DataGridColumn改變填充和因爲您已經注意到在您的DataGridColumnExt中設置樣式paddingLeft不起作用。我猜這是行不通的,因爲DataGridColumn只能作爲樣式的代理。列的項目渲染器從列中派生其樣式。所以,你有幾個選項來完成你正在嘗試做的(見下面的示例所示):

  1. 使用mx:DataGridColumn並設置像paddingLeft它所需的樣式。該列的項目渲染器將使用填充(請參見我的示例中的「第1列」)。
  2. 創建自己的項目渲染器(可以擴展mx:DataGridItemRenderer,直接在項目渲染器設置的樣式並設置相應列的itemRenderer財產(見「列2」在我的例子)。
  3. 如果你經常需要使用與同風格同列這將是有意義的創建自己的DataGridColumn和您的自定義列內設置你的itemRenderer(見「列3」在我的例子)。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 
    <mx:DataGrid x="191" y="171" dataProvider="{[{value: 'foo'}, {value : 'bar'}]}"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="Column 1" dataField="value" paddingLeft="20"/> 
      <mx:DataGridColumn headerText="Column 2" dataField="value" itemRenderer="ItemRendererWithPadding"/> 
      <local:DataGridColumnExt headerText="Column 3" dataField="value"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

ItemRendererWithPadding.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridItemRenderer xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="20"> 
</mx:DataGridItemRenderer> 

DataGridColumnExt.as

package 
{ 
    import mx.controls.dataGridClasses.DataGridColumn; 
    import mx.core.ClassFactory; 

    public class DataGridColumnExt extends DataGridColumn 
    { 
     public function DataGridColumnExt(columnName:String = null) 
     { 
      super(columnName); 
      itemRenderer = new ClassFactory(ItemRendererWithPadding); 
     } 
    } 
}