Flex: как контролировать выравнивание текста заголовка сетки данных Spark?

Если у меня есть 10 столбцов в сетке данных Spark, и некоторые заголовки должны быть выровнены по левому краю, некоторые — по правому краю, а некоторые — по центру, как проще всего это сделать?

Предполагая, что необходим пользовательский headerRenderer, есть ли какие-нибудь простые примеры, которые могут помочь мне с этим?

Заранее спасибо за любые комментарии.


person ggkmath    schedule 02.05.2012    source источник


Ответы (2)


Самый простой способ решить эту проблему — переопределить настройки в искре DefaultGridHeaderRenderer, как описано в этой ссылке:

http://flexponential.com/2011/10/30/change-fontweight-of-spark-datagrid-headers/

В частности, я использовал следующий пользовательский headerRenderer, сохраненный в виде файла: myRightHeaderRenderer.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:DefaultGridHeaderRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" > 

<fx:Declarations>
    <s:Label id="labelDisplay" 
             verticalCenter="1" left="0" right="0" top="0" bottom="0"
             verticalAlign="middle"
             maxDisplayedLines="1"
             textAlign="right"
             fontWeight="bold"
             showTruncationTip="true" />
</fx:Declarations>

</s:DefaultGridHeaderRenderer>

Этот настраиваемый модуль визуализации заголовков выравнивает текст заголовка по правому краю. Чтобы использовать его, просто добавьте его в один или несколько столбцов Spark DataGrid следующим образом:

...
<fx:Array>
    <s:GridColumn ... />
    <s:GridColumn headerRenderer="myRightHeaderRenderer" ...>
    <s:GridColumn ... />
    ...
</fx:Array>
...

Я не знаю, как это сделать, но уверен, что его можно сделать более гибким, задав для атрибута textAlign значение center, left или right.

person ggkmath    schedule 03.05.2012

Если вы посмотрите на этот блог сообщение, доступно достаточное количество исходного кода, показывающего ты как это сделать.

Однако я думаю, что пример блога намного сложнее, чем вам нужно. Как вы и опасались, вам понадобится собственный headerRenderer, но ваш код должен быть довольно простым. Я только слегка протестировал это, поэтому, если у вас есть какие-либо проблемы, дайте мне знать.

Пользовательский рендеринг заголовков

package
{
    import spark.skins.spark.DefaultGridHeaderRenderer;

    public class CustomGridHeader extends DefaultGridHeaderRenderer
    {
        public function CustomGridHeader()
        {
            super();
        }

        public function set headerTextAlign(value:String):void
        {
            labelDisplay.setStyle("textAlign",value);
            labelDisplay.styleChanged("textAlign");
        }
    }
}

Переменные, доступные для ваших столбцов...

[Bindable] private var leftFactory:ClassFactory = new ClassFactory(CustomGridHeader);
[Bindable] private var rightFactory:ClassFactory = new ClassFactory(CustomGridHeader);
[Bindable] private var centerFactory:ClassFactory = new ClassFactory(CustomGridHeader);

On initialize or preinitialize...

leftFactory.properties = {headerTextAlign: "left"};
rightFactory.properties = {headerTextAlign: "right"};
centerFactory.properties = {headerTextAlign: "center"};

Для каждой колонки...

<s:GridColumn headerText="..." headerRenderer="{centerFactory}"/>
person Sam DeHaan    schedule 02.05.2012
comment
Спасибо, Сэм, я нервничаю по поводу использования setStyle после прочтения в нескольких местах предупреждений о производительности (livedocs.adobe.com/flex/3/html/help.html?content=styles_08.html). Есть ли способ избежать setStyle? Возможно, где-то переопределив функцию? - person ggkmath; 03.05.2012
comment
@ggkmath Если вы посмотрите на сообщение в блоге, на которое я ссылаюсь, я думаю, что это делается без setStyle. - person Sam DeHaan; 03.05.2012
comment
Спасибо Сэм, очень ценю ваш вклад. Я (наконец) заставил его работать всего с несколькими строками кода (см. Мой ответ). - person ggkmath; 03.05.2012