Flex4 Щелкните правой кнопкой мыши по списку искр с помощью ContextMenu () - PullRequest
2 голосов
/ 07 марта 2011

Я хотел бы добавить пользовательские щелчки правой кнопкой мыши к ряду элементов управления списком искр. Я пробовал следующее в качестве средства визуализации элементов. (согласно поваренной книге flex 4).

Полный код рендеринга здесь http://pastebin.com/Kx8tJ1cY

Когда я щелкаю правой кнопкой мыши по Spark List, я просто получаю контекстное меню Adobe по умолчанию. Это то же поведение по умолчанию, которое я имел до того, как добавил к нему какой-либо код.

Может кто-нибудь сказать мне, как добавить правой кнопкой мыши элементы списка в Flex 4.

Пожалуйста и спасибо.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Я нашел проблему / решение.Вы не можете использовать контекстные меню, если есть Vbox или Tab Navigators.Это безумие, потому что это означает, что я не могу правильно сделать относительное расположение или дизайн приличной переменной ширины.

Цитируется из: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/ui/ContextMenu.html

Например, если элемент управления DataGrid является дочерним по отношению к TabNavigator илиКонтейнер VBox, элемент управления DataGrid не может иметь своего собственного контекстного меню.

0 голосов
/ 09 марта 2011

Кристофер Хайлер опубликовал что-то похожее (исходный код доступен здесь ).Из статьи:

Начните с получения кода Javascript из репозитория кода Google .

Шаг 1 - Настройка кода пользовательского контекстного меню

Создайте новый проект Flex в Flex Builder.Скопируйте rightclick.js и swfobject.js в папку html-template вашего проекта.После этого мне пришлось внести несколько изменений ...

  • Я изменил функцию RightClick.init (), чтобы принимать значение объекта и контейнера в качестве входных данных.Это позволяет мне передавать имя приложения в качестве объекта вместо того, чтобы каждый раз вызывать его одно и то же.
  • Я включил rightclick.js и swfobject.js в заголовок index.template.html..
  • Я добавил новый элемент div в тело, называемый flashcontent.
  • Я добавил обработчик загрузки в тег body, чтобы инициализировать RightClick
  • Я заменил AC_FL_RunContent (…)с новым SWFObject (…), обеспечивающим поддержание всех переменных шаблона.

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

Шаг 2. Прослушивание события rightClick

Затем я добавил несколько строк в основной mxml-файл моего приложения, чтобы прослушать событие ExternalInterface, которое будет отправлено при щелчке правой кнопкой мыши приложения.

private function handleCreationComplete():void
{
    ExternalInterface.addCallback("rightClick", handleRightClick);
}

private function handleRightClick():void
{
    Alert.show("Right Click Success!");
}

Шаг 3 - отправка события на правильный объект

Получить событие в основное приложение легко, но мы действуемВы хотите, чтобы соответствующий дочерний объект был уведомлен, когда происходит событие щелчка правой кнопкой мыши.Поскольку я не использую в своем приложении события двойного щелчка, я решил, что каждое событие правого клика будет рассматриваться как событие двойного щелчка.Пользователи без двухкнопочной мыши (или пользователи Mac) могут просто дважды щелкнуть мышью, чтобы открыть то же меню, а пользователи с двухкнопочной мышью просто щелкнуть правой кнопкой мыши.Вот как я могу убедиться, что событие отправлено соответствующему объекту.

private function handleRightClick():void
{
    var objects:Array = systemManager.getObjectsUnderPoint(
        new Point(mouseX,mouseY));
    if (objects.length>0)
    {
        var object:Object = objects[objects.length-1];
        var relatedObject:InteractiveObject;
        if (object is InteractiveObject)
            relatedObject = object as InteractiveObject;
        else if (object.parent && object.parent is InteractiveObject)
            relatedObject = object.parent;
        var event:MouseEvent = new MouseEvent(
            MouseEvent.DOUBLE_CLICK,true,false,mouseX,mouseY,
            relatedObject);
        object.dispatchEvent(event);
    }
}

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

...