Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Подсветка элементов в MenuBar (http://www.flasher.ru/forum/showthread.php?t=174963)

Dimitry_II 06.02.2012 19:19

Подсветка элементов в MenuBar
 
Как мне кажется, меню во флексе работает несколько специфично.
Пока работа с меню не выходит за рамки простого использования, все представляется несложным, но шаг в сторону, и начинаются проблемы.

Есть меню с примерно таким провайдером:
Код AS3:

private var menubarXML:XMLList = <>
<menuitem label="Management">
    <menuitem label="Item1"/>
</menuitem>
<menuitem label="Additions">
    <menuitem label="Item2"/>
    <menuitem label="Item3"/>
    <menuitem label="Item4"/>
</menuitem></>;
[Bindable] public var menuBarCollection:XMLListCollection;
 
...
menuBarCollection = new XMLListCollection(menubarXML); //в init()
...
 
<mx:MenuBar id="menuBar" top="0" right="0" left="0" width="100%" height="26" dataProvider="{menuBarCollection}" labelField="@label" itemClick="menuBarItemClickHandler(event)"/>

В обработчике menuBarItemClickHandler я инспектирую выбранный элемент и меняю стейт в зависимости от данных в структуре (тут она сильно урезана).

Вопрос в следующем: в зависимости от действий пользователя (или события с сервера) должен подсветиться - стать красным - один или несколько пунктов меню. Скажем, в определенный момент красным должен подсветиться "Addition" и "Item3". Подсветка верхнего уровня проблемы не вызывает, типа такого:
Код AS3:

(menuBar.menuBarItems[1] as MenuBarItem).setStyle("color", "#ff0000");

А вот как подсветить нужный пункт в выпадающем меню?

Если добавить обработчик в MenuBar menuShow, то не составит труда сделать красными все пункты: event.menu.setStyle(... А вот как конкретный - что-то не получается разобраться. Спасибо.

alatar 06.02.2012 19:45

Добавьте еще один параметр в XML (для каждого итема) и отслеживайте его в MenuBarItem, например.

Dimitry_II 06.02.2012 21:45

У меня там и так параметров много. Мне отслеживать не надо.
Мне нужно из любого места проекта сделать пункт меню другим цветом. Причем, до того, как этот пункт будет выбран пользователем. Как обратиться к любому пункту меню?

alatar 06.02.2012 23:09

Пока меню закрыто никаких "пунктов", кроме верхнего уровня, не существует. Не к чему обращаться.

Dimitry_II 07.02.2012 00:57

О! Согласен. У MenuBar массив menus действительно пустой.
Вот у меня тут и проблема ... Скажем, для двух пунктов меню у меня есть 2 флага - нужно выделять или нет. То есть при отображении выпадающего меню я уже буду знать - нужно ли соответствующие пункты выделить цветом. Также я могу в хандлере menuShow определить - "нужное" ли меню открывают (остальные игнорировать). А вот зальше затык - у меня есть event.menu в этом хандлере, есть возможность работать с menuBar, но вот как выделить именно нужные пункты - я не понимаю.

Добавлено через 15 часов 35 минут
Нет соображений? Как выделить только нужные пункты?

alatar 07.02.2012 16:41

Я вам все "соображения" уже в первом посте написал. Делайте свой MenuBarItem, который будет перекрашиваться в зависимости от данных в его data.

Dimitry_II 07.02.2012 16:56

Ну, назвать себя экспертом или профи во флеше я не могу, но если запостил вопрос, то это значит, что изыскания по нему делал.

Вот описание класса MenuBarItem:
Цитата:

Класс MenuBarItem определяет средство визуализации элементов по умолчанию для верхнего уровня строки меню. По умолчанию средство визуализации элементов выводит текст, связанный с каждым элементом на самом верхнем уровне в строке меню, и необязательный значок.
Выпадающий список меню - это явно не "верхний уровень строки меню".
И хотя дальше там написано:
Цитата:

Можно также определить средство визуализации элементов для всплывающих подменю элемента управления MenuBar. Поскольку каждое всплывающее подменю – экземпляр элемента управления Menu, используется класс MenuItemRenderer для определения средства визуализации элементов всплывающих подменю.
тут я не очень понимаю, поэтому и спрашиваю.
Если честно, то рендерить список меню не очень хочется. Уверен, что можно при показе списка проходить по нему и менять определенные пункты. Только вот как?

alatar 07.02.2012 17:17

Цитата:

тут я не очень понимаю, поэтому и спрашиваю.
Что конкретно не понятно и что спрашиваете? Все пункты меню, которые вы видите по-умолчанию являются экземплярами MenuBarItem. Это можно изменить передав свойство menuBarItemRenderer ссылку на фабрику создающую ваши элементы (В mxml достаточно указать полное имя класса рендерера, например "mx.controls.menuClasses.MenuBarItem").
Цитата:

Если честно, то рендерить список меню не очень хочется.
Это вообще о чем?

P.S. справку можете мне не цитировать.


Часовой пояс GMT +4, время: 21:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.