以编程方式启用/禁用Flex 4中的菜单栏按钮

时间:2010-10-18 15:27:44

标签: flex4 mxml e4x menubar

我的Flex4(AIR)项目中有以下XML,用于定义菜单界面的开头:

<mx:MenuBar x="0" y="0" width="100%" id="myMenuBar" labelField="@label" itemClick="menuChange(event)">
    <mx:dataProvider>
    <s:XMLListCollection>
    <fx:XMLList xmlns="">
        <menu label="File">
            <item label="New"/>
            <item label="Load"/>
            <item label="Save" enabled="false"/>
        </menu>
        <menu label="Help">
            <item label="About"/>
        </menu>
    </fx:XMLList>
    </s:XMLListCollection>
    </mx:dataProvider>
</mx:MenuBar>

我试图找到一个语法,让我通过单击“加载”加载文件后将保存按钮设置为enabled = true,但是我无法弄清楚语法,有人可以提出建议吗

目前检测到按钮点击的方式是通过Switch / Case测试MenuEvent event.item。@ label的String结果。也许这不是最好的方式?

2 个答案:

答案 0 :(得分:5)

再次回答我自己的问题。什么是我正在做的事似乎没有人似乎想回答???

无论如何,这是:

事实证明,由于菜单栏是用XML定义的,而且它完全是任意的,它完全取决于你决定如何定义菜单,在我的例子中,根据上面的菜单XML,改变“eanabled”状态的语法“保存”按钮的内容如下所示。

menubarXML.item.(@label=="Save").@enabled = "true";

其中enubarXML是一个XMLListCollection,它保存了我单独重新定义的XMLList。

[Bindable]
        public var menuBarCollection:XMLListCollection;

        private var menubarXML:XMLList =<>
            <menu label="File">
                <menuitem label="New" data="1A"/>
                <menuitem label="Open" data="1B"/>
                <menuitem label="Save" data="1C" enabled="false"/>
            </menu>
            <menu label="Help" data="2A">
                <menuitem label="About" data="2A"/>
            </menu>
            </>;

然后在完成应用程序创建时调用此函数:

private function initCollections():void {
            menuBarCollection = new XMLListCollection(menubarXML);
        }

当然还有菜单栏的XML定义(根据需要自定义):

<mx:MenuBar id="myMenuBar" labelField="@label" itemClick="menuChange(event)" dataProvider="{menuBarCollection}"/>

希望有人发现我的劳动成果很有用。

答案 1 :(得分:0)

private var actions : Object = {
    mi_new : mi_new,
    mi_open : mi_open
};

protected function myMenuBar_itemClickHandler(event:MenuEvent):void
{
    actions[event.item.@action]();
}

private function mi_new() : void {
    // do new stuff
}

private function mi_open() : void {
    // do open stuff
}

private var menubarXML:XMLList =<>
    <menu label="File">
        <menuitem label="New" data="1A" action="mi_new"/>
        <menuitem label="Open" data="1B" action="mi_open"/>
        <menuitem label="Save" data="1C" enabled="false"/>
    </menu>
    <menu label="Help" data="2A">
        <menuitem label="About" data="2A"/>
    </menu>
    </>;