Flex: панель меню, щелчок по меню

Я не знаю почему, но я вижу, что событие 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>

person enesness    schedule 11.03.2010    source источник


Ответы (3)


Такое поведение является особенностью. Подумайте, что это как строка меню в вашем браузере: нажатие на элементы верхнего уровня, такие как File, Edit, View и т. Д., Просто отображает всплывающее окно, они не запускают никаких действий.

На странице Liveocs для MenuBar

Элемент управления MenuBar определяет горизонтальную строку меню верхнего уровня, содержащую один или несколько пунктов меню. При нажатии на элемент меню верхнего уровня открывается всплывающее подменю, которое является экземпляром элемента управления «Меню».

Строка меню верхнего уровня элемента управления MenuBar обычно всегда видна. Он не предназначен для использования в качестве всплывающего меню. Отдельные подменю всплывают, когда пользователь выбирает их с помощью мыши или клавиатуры.

Если вы должны сделать что-то при щелчке по элементу верхнего уровня, прослушайте событие click на MenuBar и пройдитесь по цепочке parent event.target в поисках MenuBarItem, средства визуализации элементов по умолчанию для элементов верхнего уровня MenuBar

person Amarghosh    schedule 11.03.2010

Думаю, это может помочь,

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

Fв следующей строке меню,

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

Здесь я также добавил свойство index. В качестве XML мы можем добавить в него любой элемент, кроме некоторых ключевых слов.

Событие «ItemClick» возьмет на себя дочерние элементы, а «Click» позаботится о элементах строки меню верхнего уровня (родителях).

Надеюсь это поможет.

С уважением, Пракаш

person Prakashm88    schedule 20.10.2010

Строка меню, которую Flex выдает из коробки, имеет множество ограничений. Например, у меня не может быть вложенных подменю, таких как top_menu -level 1 menu -level 2 menu -level 3 menu ..... чтобы противостоять этому, нужно добавить дополнительное меню в каждом подменю, что действительно больно.

person Community    schedule 13.05.2010