在AS3中启用了可选择的自定义上下文菜单

时间:2009-06-06 15:08:22

标签: flex actionscript-3 air

我在AS3中有一个我想要可选择的标签(.selectable = true)我想要在右键单击ALONG并显示自定义菜单项时显示clipboardMenu。

如果我这样做:

var label:Label = new Label();
label.text = "test";
label.selectable = false;

var contextMenu = new ContextMenu();
contextMenu.clipboardMenu = true;
contextMenu.clipboardItems.copy = true;
contextMenu.clipboardItems.selectAll = true;
contextMenu.addItem(new ContextMenuItem("Test Item"));
contextMenu.addItem(new ContextMenuItem("Test Item 2"));

label.contextMenu = contextMenu;

thing.addChild(label);

这个ALMOST工作 - 当我右键单击标签时,我得到一个包含剪贴板项目和我的自定义项目的菜单....但是,由于.selectable =标签中的文本不可选择假。这使得剪贴板菜单项无用。

如果我改变了行:

label.selectable = false;

为:

label.selectable = true;

标签是可选择的 - 但只有剪贴板菜单项存在。

如何使标签可选择并且具有包含我的自定义项目+标准剪贴板项目的菜单?

感谢您的帮助。

BTW - 这是使用3.2 SDK的AIR应用程序。

1 个答案:

答案 0 :(得分:1)

尝试使用带标签的UITextField:

var label:UITextField = new UITextField();
label.text = "test";
label.selectable = true;

var contextMenu:ContextMenu = new ContextMenu();
contextMenu.clipboardMenu = true;
contextMenu.clipboardItems.copy = true;
contextMenu.clipboardItems.selectAll = true;
contextMenu.customItems = [new ContextMenuItem("Test Item"), new ContextMenuItem("Test Item 2")];

label.contextMenu = contextMenu;

addChild(label);

此外,您可以扩展Label以将上下文菜单直接应用于内部UITextField(此解决方案仅适用于AIR,但您可以使用ContextMenu而不是NativeMenu,它可以在AIR和Flash播放器中工作):

package test
{
import mx.controls.Label;
import flash.display.NativeMenu;
import mx.core.UITextField;
import mx.core.mx_internal;

use namespace mx_internal;
public class LabelWithContextMenu extends Label
{
    public function LabelWithContextMenu()
    {
        super();
    }

    override public function get contextMenu():NativeMenu
    {
        if (textField is UITextField)
            return UITextField(textField).contextMenu;
        else
            return super.contextMenu;
    }

    override public function set contextMenu(cm:NativeMenu):void
    {
        if (textField == null)
            createTextField(-1);
        if (textField is UITextField)
            UITextField(textField).contextMenu = cm;
        else
            super.contextMenu = cm;
    }

}
}