以编程方式启用/禁用Flex 4中的menuBar按钮

Ham*_*mid 4 e4x mxml menubar flex4

我的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>
Run Code Online (Sandbox Code Playgroud)

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

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

Ham*_*mid 5

回答我自己的问题.... 什么是我正在做的东西似乎没有人似乎想回答???

无论如何,这里是:

事实证明,由于菜单栏是用XML定义的,而且它完全是任意的,它完全取决于你决定如何定义你的菜单,在我的例子中,根据上面的菜单XML,改变Save的"eanabled"状态的语法按钮如下.

menubarXML.item.(@label=="Save").@enabled = "true";
Run Code Online (Sandbox Code Playgroud)

其中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>
            </>;
Run Code Online (Sandbox Code Playgroud)

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

private function initCollections():void {
            menuBarCollection = new XMLListCollection(menubarXML);
        }
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 出于某种原因,我无法让你的语法为我工作.我最终使用的东西是`menubar..menuitem.(属性("标签")=="保存").@ enabled = true;`而不是.另外,我无法弄清楚你为什么使用`XMLListCollection`作为dataprovider.一个普通的`XML`对象类型工作正常,项目直接更新动态更改到XML.是否有一个特定的原因你使用`XMLListCollection`?不是最大的交易; 只是觉得下一个人可能会发现另一个用户的"脚注"很有用. (2认同)