2009-06-06 85 views
0

我在AS3中有一個標籤,我希望可以選擇(.selectable = true)並且我希望clipboardMenu通過右鍵單擊帶有自定義菜單項的ALONG來顯示。在AS3中可選擇啓用自定義上下文菜單

如果我這樣做:

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

這種近乎工作 - 在我的標籤我得到了剪貼板的項目和我的自定義項的菜單上單擊鼠標右鍵....但是,由於.selectable = false,標籤中的文本不可選。這使得剪貼板菜單項無用。

如果我改變該行:

label.selectable = false; 

到:

label.selectable = true; 

標籤是可選的 - 但是,只有剪貼板菜單項都存在。

我該如何使標籤可選,並有我的自定義項目+標準剪貼板項目的菜單?

感謝您的幫助。

順便說一句 - 這是與使用3.2 SDK的AIR應用程序。使用的UITextField insted的標籤

回答

1

嘗試:

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

此外,您還可以擴展標籤直接申請上下文菜單內的UITextField(此解決方案僅在AIR,雖然你可以使用NativeMenu中的文本菜單istead和它可以在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; 
    } 

} 
} 
+0

非常好的例子 - 偉大的解決方案。非常感謝你。 +1與複選框。非常感激。 – Gabriel 2009-06-07 09:05:09