坚持了几天。我尝试使用键盘事件处理程序在列表之间实现拖放。它进展不顺利。这就是我的主题 -
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)
有什么想法吗?
答案 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事件没有太多运气。