我想为一些火花列表控件添加自定义右键单击。我尝试了以下作为项目渲染器。(根据 flex 4 烹饪书)。
完整的渲染代码在这里http://pastebin.com/Kx8tJ1cY
当我右键单击 Spark 列表时,我只需获得 Adobe 默认上下文菜单。这与我添加任何代码之前的默认行为相同。
谁能告诉我如何在 Flex 4 中添加右键单击列表项。
谢谢,麻烦您了。
我想为一些火花列表控件添加自定义右键单击。我尝试了以下作为项目渲染器。(根据 flex 4 烹饪书)。
完整的渲染代码在这里http://pastebin.com/Kx8tJ1cY
当我右键单击 Spark 列表时,我只需获得 Adobe 默认上下文菜单。这与我添加任何代码之前的默认行为相同。
谁能告诉我如何在 Flex 4 中添加右键单击列表项。
谢谢,麻烦您了。
我找到了问题/解决方案。如果有 Vboxes 或 Tab Navigator,则不能使用上下文菜单。这太疯狂了,因为这意味着我不能正确地进行相对布局或体面的可变宽度设计。
引自:http ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/ui/ContextMenu.html
例如,如果 DataGrid 控件是 TabNavigator 或 VBox 容器的子级,则 DataGrid 控件不能有自己的上下文菜单。
Christopher Huyler 发布了类似的内容(此处提供源代码)。来自文章:
首先从Google 的代码存储库中获取 Javascript 代码。
第 1 步 - 设置自定义上下文菜单代码
在 Flex Builder 中创建一个新的 Flex 项目。将 rightclick.js 和 swfobject.js 复制到项目的 html-template 文件夹中。从这里开始,我不得不做出一些改变……</p>
进行这些更改后,我确认我的应用程序中没有出现右键单击上下文菜单。
第 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);
}
}
我希望这有帮助!