Расширение DataGridColumn и указание paddingLeft - PullRequest
0 голосов
/ 22 ноября 2010

Я пытаюсь расширить 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.[Сгенерированный код (используйте ключ для сохранения): Путь: DataGridColumnExt-generated.as, Строка: 68, Столбец: 13] DataGridColumnWithLeftPadding Неизвестный 1290353024334 24677

1 Ответ

2 голосов
/ 23 ноября 2010

Вам не нужно расширять DataGridColumn, чтобы изменить отступы, и, как вы уже заметили, установка стиля paddingLeft в вашем DataGridColumnExt не работает.Я думаю, это не работает, поскольку 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);
        }
    }
}
...