Es ist nicht offensichtlich, bis Sie es versucht haben =) Ich hatte vor ein paar Wochen mit dem gleichen Problem. Dies war meine Lösung:
Die Liste:
<List>
<mouseDown>onListMouseDown(event)</mouseDown>
</Tree>
Die Maus nach unten Handler:
private function onMouseDown(event : MouseEvent) : void {
var list : List = List(event.currentTarget);
// the data of the clicked row, change the name of the class to your own
var item : MyDataType = MyDataType(list.selectedItem);
var source : DragSource = new DragSource();
// MyAwsomeDragFormat is the key that you will retrieve the data by in the
// component that handles the drop
source.addData(item, "MyAwsomeDragFormat");
// this is the component that will be shown as the drag proxy image
var dragView : UIComponent = new Image();
// set the source of the image to a bigger version here
dragView.source = getABiggerImage(item);
// get hold of the renderer of the clicked row, to use as the drag initiator
var rowRenderer : UIComponent = UIComponent(list.indexToItemRenderer(list.selectedIndex));
DragManager.doDrag(
rowRenderer,
source,
event,
dragView
);
}
, dass der Drag wird gestartet, wenn der Benutzer ein Element in der Liste klickt. Beachten Sie, dass ich dragEnabled
und die anderen Drag-related Eigenschaften nicht auf der Liste festlegen, da ich all das selbst handle.
Es kann sinnvoll sein, diese von den Event-Handler an den Anfang hinzu:
if (event.target is ScrollThumb || event.target is Button) {
return;
}
Nur zu, wenn der Benutzer irgendwo in der Scrollbar klickt. Es ist nicht sehr elegant, aber es macht den Job.
DragView sollte Breite und Höhe einstellen :) – jason