将自定义菜单项添加到datagrid

时间:2013-03-20 16:39:28

标签: flex flex4

我有一个自定义DataGrid,我想添加一个自定义菜单:

public function MyCustomDataGrid() {
    super();
    init();
}

private function init():void {
    var _copyElementMenuItem:ContextMenuItem = new ContextMenuItem("Copier Donnée");
    _copyElementMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handleCopyData);

    this.contextMenu = new ContextMenu();
    contextMenu.hideBuiltInItems();
    contextMenu.customItems = [ _copyElementMenuItem ];
}

问题是我的自定义菜单项从未显示过,我总是最终得到标准的Flash上​​下文菜单:

enter image description here

我错过了什么?我怎么能麻烦拍这个?谢谢。

1 个答案:

答案 0 :(得分:1)

它适用于我。看看我的代码。

enter image description here

//应用

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           minWidth="955" minHeight="600" xmlns:custommenu="com.custommenu.*">
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        [Bindable]private var collection:ArrayCollection = new ArrayCollection([
            {field01:"field01", field02:"field02"},
            {field01:"field01", field02:"field02"}
        ]);

    ]]>
</fx:Script>
<s:VGroup x="20" y="20">
    <custommenu:MyCustomDataGrid 
        dataProvider="{collection}" 
        width="200" height="100">
        <custommenu:columns>
            <s:ArrayList>   
                <s:GridColumn dataField="field01" headerText="Field 1"/>
                <s:GridColumn dataField="field02" headerText="Field 2"/>
            </s:ArrayList>                  
        </custommenu:columns>         
    </custommenu:MyCustomDataGrid>
</s:VGroup>
</s:Application>

// MyCustomDataGrid

<?xml version="1.0" encoding="utf-8"?>
<s:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" 
        creationComplete="init()">
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;

        protected function init():void
        {
            var _copyElementMenuItem:ContextMenuItem = new ContextMenuItem("Copier Donnée");
            _copyElementMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, handleCopyData);

            this.contextMenu = new ContextMenu();
            contextMenu.hideBuiltInItems();
            contextMenu.customItems = [ _copyElementMenuItem ];
        }

        private function handleCopyData(evt:ContextMenuEvent):void 
        {
            Alert.show("Hello!");
        }

    ]]>
</fx:Script>

</s:DataGrid>