我在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应用程序。
答案 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;
}
}
}