Flex:如何控制Spark数据网格标题文本对齐?

时间:2012-05-02 19:37:21

标签: actionscript-3 flex flex4 flex-spark

如果我在Spark数据网格中有10列,并且某些标题需要左对齐,一些标题右对齐,有些标题居中,最简单的方法是什么?

假设需要一个自定义headerRenderer,是否有任何简单的例子可以引导我完成它?

提前感谢任何评论。

2 个答案:

答案 0 :(得分:4)

我能找到解决此问题的最简单方法是覆盖spark DefaultGridHeaderRenderer中的设置,如以下链接所述:

http://flexponential.com/2011/10/30/changing-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属性参数化为centerleftright可以使其更加灵活。

答案 1 :(得分:2)

如果您查看this blog post,可以使用相当数量的source code来告诉您如何执行此操作。

但是,我认为博客的例子比你需要的要复杂得多。您需要一个自定义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);

initializepreinitialize ...

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

每列......

<s:GridColumn headerText="..." headerRenderer="{centerFactory}"/>