2

我想防止用户将某些项目从一个 TileList 拖到另一个。它们是否可以放入 TileList 应根据与项目关联的数据来确定。

为了显示该项目不能拖到 TileList 我想在光标旁边的红色圆圈图标中显示正常的白色十字。如果在确定不应发生丢弃时尝试丢弃,我想显示一条警告消息,解释为什么无法丢弃该项目。

4

1 回答 1

0

您需要阻止对 dragDrop 事件(阻止它被添加到新列表)和 dragComplete 事件(阻止它从旧列表中删除)的默认操作。这是一个允许项目在列表内移动但不能在列表之间移动的示例:

private var preventMove:Boolean = false;
private function onDragDrop(event: DragEvent): void {
    preventMove = (event.dragInitiator != event.target);
    if (preventMove)
        event.preventDefault();
}

private function onDragComplete(event: DragEvent): void {
    if (preventMove) {
        event.preventDefault();
    }
}

您可以使用任何您想要的标准来代替根据 dragDrop 目标检查 dragInitiator。除了在 dragComplete 上调用 preventDefault 外,您还可以弹出错误消息。

你有两个列表(或 TileLists 或其他):

<s:List dragDrop="onDragDrop(event)" dragComplete="onDragComplete(event)"
        dragEnabled="true" dropEnabled="true"  dragMoveEnabled="true">
</s:List>
<s:List dragDrop="onDragDrop(event)" dragComplete="onDragComplete(event)"
        dragEnabled="true" dropEnabled="true"  dragMoveEnabled="true">
</s:List>

如果您不需要能够在同一个列表中拖放东西,或者您只是拖动一个方向,那么只需不启用两个列表上的所有内容就可以更简单。

Chetan Sastry 链接的文章现在已经过时并且链接已断开。

于 2015-10-07T19:32:37.863 回答