Datagrid Flex中的Flex对齐复选框

时间:2010-06-30 15:40:37

标签: flex datagrid checkbox flex4

我使用项呈示器在我的数据网格中显示一个复选框,如;

<mx:DataGridColumn headerText="Visible" dataField="visibleInd" width="48" 
itemRenderer="mx.controls.CheckBox" 
rendererIsEditor="true" 
editorDataField="selected"
/>

这样可以正常工作,但复选框左对齐,如;

alt text http://img96.imageshack.us/img96/9239/93364060.jpg

如何在中间对齐?

我用过;

            <mx:DataGridColumn headerText="Visible" dataField="visibleInd" width="48" 
                               editorDataField="selected"
                               >
            <mx:itemRenderer>
                <fx:Component>
                    <mx:Box width="100%" height="100%" 
                            horizontalAlign="center" verticalAlign="middle">
                        <mx:CheckBox selected="{data.visibleInd}" />
                    </mx:Box>
                </fx:Component>
            </mx:itemRenderer>

但是在这种情况下,我的代码确实在中间对齐了复选框,但是没有在我的数据提供者中保存数据。

我错过了什么吗?

6 个答案:

答案 0 :(得分:16)

不使用<mx:Box />,而是使用<mx:Canvas /><s:Group />(在Flex 4中)。

另外,在复选框上设置horizontalCenter="0"

例如:

<mx:itemRenderer>
    <mx:Component>
        <mx:Canvas width="100%" height="100%">
            <mx:CheckBox selected="{data.visibleInd}" horizontalCenter="0" />
        </mx:Canvas>
    </mx:Component>
</mx:itemRenderer>

答案 1 :(得分:5)

只需使用DataGridColumn的textAlign样式:

<mx:DataGridColumn headerText="Visible" textAlign="center">
    <mx:itemRenderer>
        <mx:Component>
            <mx:CheckBox selected="{data.visibleInd}"/>
        </mx:Component>
    </mx:itemRenderer>
</mx:DataGridColumn>

答案 2 :(得分:0)

我非常确定这会将mx:itemRenderer更改为mx:itemEditor

答案 3 :(得分:0)

请使用以下提示放置复选框&amp;图像位于列的中心。

<mx:CheckBox paddingLeft="20" />
<mx:Image horizontalAlign="center"/>

答案 4 :(得分:0)

见:

<?xml version="1.0" encoding="utf-8"?>
    <s:GridItemRenderer 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:Script>
            <![CDATA[
                override public function prepare(hasBeenRecycled:Boolean):void {
                    if(data != null){
                        chb.selected = data[column.dataField];
                    }
                }

                protected function chb_clickHandler(event:MouseEvent):void{
                    data[column.dataField] = !chb.selected;
                }
            ]]>
        </fx:Script>
        <s:CheckBox id="chb" click="chb_clickHandler(event)" horizontalCenter="0" verticalCenter="0"/>
    </s:GridItemRenderer>

答案 5 :(得分:-1)

尝试将复选框宽度设为100%