我想防止用户将某些项目从一个 TileList 拖到另一个。它们是否可以放入 TileList 应根据与项目关联的数据来确定。
为了显示该项目不能拖到 TileList 我想在光标旁边的红色圆圈图标中显示正常的白色十字。如果在确定不应发生丢弃时尝试丢弃,我想显示一条警告消息,解释为什么无法丢弃该项目。
我想防止用户将某些项目从一个 TileList 拖到另一个。它们是否可以放入 TileList 应根据与项目关联的数据来确定。
为了显示该项目不能拖到 TileList 我想在光标旁边的红色圆圈图标中显示正常的白色十字。如果在确定不应发生丢弃时尝试丢弃,我想显示一条警告消息,解释为什么无法丢弃该项目。
您需要阻止对 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 链接的文章现在已经过时并且链接已断开。