Flex - 使用键盘

时间:2016-08-12 12:43:27

标签: actionscript-3 flex actionscript keyboard drag

坚持了几天。我尝试使用键盘事件处理程序在列表之间实现拖放。它进展不顺利。这就是我的主题 -

        private function keyboardHandler(event:KeyboardEvent):void {
            if (event.keyCode == Keyboard.SPACE){
                var list : List = List(event.currentTarget);
                var dragInitiator:UIComponent = UIComponent(list.indexToItemRenderer(list.selectedIndex));
                var ds:DragSource = new DragSource();
                ds.addData(list.selectedItem, "listItem");
                DragManager.doDrag(dragInitiator, ds, new MouseEvent(MouseEvent.CLICK));
            }
        }

<s:Panel title="EXAMPLE"
         width="75%" height="75%" 
         horizontalCenter="0" verticalCenter="0">
    <s:VGroup left="10" right="10" top="10" bottom="10">
        <s:Label text="DRAG" />
        <mx:List id="dragSource" width="100%" color="blue"
                 keyDown="keyboardHandler(event)"
                 change="selectedListItem = List(event.currentTarget).selectedItem"
                 dataProvider="{mystates.state}"/>
        <s:Label text="DROP" />
        <mx:List id="dropSource" width="100%" color="blue"
                 keyDown="keyboardHandler(event)"
                 dataProvider="{mystates.state}" dropEnabled="true"/>
    </s:VGroup>
</s:Panel>

拖动似乎正在初始化,但它不会让我放在目标列表上(目前使用鼠标进行测试)。使用调试器 - 触发键盘处理程序后的变量如下:

dragInitatior - mx.controls.listClasses.ListItemRenderer(@ 90c83c1) ds - mx.core.DragSource(@ 8fe5f01)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我设法捏造了它,并通过在我的列表项上模拟MouseDown事件来开始拖动。

private function customDrag(event:KeyboardEvent):void {
            if (event.keyCode == Keyboard.SPACE){
                var selectedItem:IListItemRenderer = myList.indexToItemRenderer(myList.selectedIndex);
                selectedItem.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
            }
        }

通过目标容器上的键盘执行dragDrop事件没有太多运气。