2010-10-18 70 views
4

我在FLEX4以下XML(AIR)项目定义我的菜单界面的开始:编程方式启用/ Flex中禁用菜单栏按钮4

<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结果。也许这不是最好的方法?

+0

也许这也是有用:http://www.interactiveoctopus.com/blog/index.php/2008/08/flex-programmatically-disableenable-items-in-a-menubar-component/ – ggkmath 2012-09-13 13:03:22

回答

5

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

不管怎么说,那就是:

事实证明,因为菜单栏是在XML定义,它是完全随意的,它完全取决于你决定如何定义你的菜单,在我的情况下,根据菜单在上面的XML中,更改Save按钮的“eanabled”状态的语法如下所示。

menubarXML.item.(@label=="Save")[email protected] = "true"; 

其中enubarXML是为XMLListCollection保持我seperately重新定义了的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}"/> 

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

+2

对于某些原因,我无法让你的语法为我工作。我最终使用了'menubar..menuitem。(attribute(“label”)==“Save”)中的一些东西。@ enabled = true;'代替。另外,我无法弄清楚为什么你要为数据提供者使用'XMLListCollection'。一个普通的旧'XML'对象类型工作得很好,并且这些项目在动态更改时直接更新到XML。是否有你使用'XMLListCollection'的具体原因?不是最大的交易;只是认为下一个人可能会发现另一个用户的“脚注”有用。 – merv 2011-10-13 04:37:53

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

protected function myMenuBar_itemClickHandler(event:MenuEvent):void 
{ 
    actions[[email protected]](); 
} 

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> 
    </>;