我不知道为什么但是我发现除非你点击一个子项目,否则菜单栏上的itemclick事件不会被触发。
处理顶层菜单项点击并且没有子菜单项的简洁方法是什么。
例如,我想在点击MenuItem B时触发事件。
<?xml version="1.0"?>
<!-- menus/MenuBarControl.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:MenuBar id="myMenuBar" labelField="@label" itemClick="{itemClick(event)}" >
<mx:XMLList>
<menuitem label="MenuItem A">
<menuitem label="SubMenuItem A-1"/>
<menuitem label="SubMenuItem A-2"/>
</menuitem>
<menuitem label="MenuItem B"/>
</mx:XMLList>
</mx:MenuBar>
</mx:Application>
答案 0 :(得分:3)
猜猜这有用,
protected function myMenuBar_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
stackIndex=event.target.data.@index;
}
protected function myMenuBar_itemClickHandler(event:MenuEvent):void
{
// TODO Auto-generated method stub
stackIndex=event.item.@index;
}
以下菜单栏,
<mx:MenuBar id="myMenuBar" labelField="@label" click="myMenuBar_clickHandler(event)" itemClick="myMenuBar_itemClickHandler(event)" >
<mx:XMLList>
<menuitem label="MenuItem A" index="0">
<menuitem label="SubMenuItem A-1" index="0-0"/>
<menuitem label="SubMenuItem A-2" index="0-1"/>
</menuitem>
<menuitem label="MenuItem B" index="1"/>
</mx:XMLList>
</mx:MenuBar>
这里我还添加了一个属性'索引'。作为XML,除了一些关键字之外,我们可以在其中添加任何元素。
“ItemClick”事件将采用儿童,“点击”将处理顶级菜单栏物品(父母)。
希望这有帮助。
此致 普拉卡什
答案 1 :(得分:1)
此行为是设计使然。将其视为浏览器中的菜单栏:单击文件,编辑,查看等顶级项目只显示弹出窗口,它们不会触发任何操作。
MenuBar
控件定义一个包含一个或多个菜单项的水平顶级菜单栏。单击顶级菜单项会打开一个弹出子菜单,该子菜单是Menu控件的一个实例。
MenuBar
控件的顶级菜单栏通常始终可见。它不适合用作弹出菜单。当用户使用鼠标或键盘选择它们时,会弹出单个子菜单。
如果您必须在顶级项目点击上执行某些操作,请收听click
上的MenuBar
事件并遍历parent
event.target
链中搜索MenuBarItem
,MenuBar
答案 2 :(得分:0)
flex开箱即用的菜单栏有很多限制。例如我不能有嵌套的子菜单 顶部菜单 - 1级菜单 级别2菜单 级别3菜单..... 为了解决这个问题,需要在每个子菜单中添加一个额外的菜单,这确实很痛苦。