Ich möchte einem Benutzer gestatten, Elemente in einem Flex-Strukturordner neu anzuordnen, diese Elemente jedoch nicht außerhalb des Ordners zu verschieben. Ich kann verhindern, dass der äußere Tropfen erfolgreich ist, aber ich möchte dem Benutzer Feedback geben (vor dem Tropfen), dass der Tropfen nicht erfolgreich sein wird. Ich habe viele Beispiele bezüglich der Drop-Aktion gefunden, aber nichts, das dem Benutzer die richtige Rückmeldung zeigt.Flex-Baum-Rückmeldung verhindern
Entsprechend der Baumdokumentation sollte ich in der Lage sein, DragManager.showFeedback(DragManager.NONE)
während des dragOver
Ereignisses aufzurufen, aber das funktioniert nicht. Ein kurzes Beispielprojekt ist unten enthalten. Gibt es eine Möglichkeit, dem Benutzer während eines Ziehereignisses anzuzeigen, dass der Abbruch nicht erfolgreich ist?
Vielen Dank im Voraus für jede Lösung!
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="354"
height="480">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.IUIComponent;
import mx.core.mx_internal;
import mx.events.DragEvent;
import mx.events.FlexEvent;
import mx.managers.DragManager;
protected function tree_dragEnterHandler(event:DragEvent):void {
// only items can be dragged - not folders
if ([email protected] == "item") {
DragManager.acceptDragDrop(IUIComponent(event.currentTarget));
} else {
event.preventDefault();
DragManager.showFeedback(DragManager.NONE);
}
}
protected function tree_dragOverHandler(event:DragEvent):void {
var dropData:Object = tree.mx_internal::_dropData;
var dragItem:XML = event.dragSource.dataForFormat("treeItems")[0];
if (!dropData || !dropData.parent || !dragItem.parent() || dragItem.parent() != dropData.parent) {
trace("preventing drop");
DragManager.showFeedback(DragManager.NONE);
return;
}
trace("allowing drop");
DragManager.showFeedback(DragManager.MOVE);
}
protected function tree_dragDropHandler(event:DragEvent):void {
}
]]>
</fx:Script>
<fx:Declarations>
<fx:XML id="treeData">
<folder id="root"
label="root"
type="root">
<folder id="folder1"
label="Folder 1"
type="folder">
<folder id="folder2"
label="Folder 2"
type="folder">
<item id="item1"
label="Item 1"
type="item"/>
<item id="item2"
label="Item 2"
type="item"/>
<item id="item3"
label="Item 3"
type="item"/>
<item id="item4"
label="Item 4"
type="item"/>
<item id="item5"
label="Item 5"
type="item"/>
</folder>
</folder>
<folder id="folder3"
label="Folder 3"
type="folder"/>
<folder id="folder4"
label="Folder 4"
type="folder"/>
<folder id="folder5"
label="Folder 5"
type="folder"/>
</folder>
</fx:XML>
</fx:Declarations>
<mx:Tree id="tree"
left="29"
right="28"
top="28"
bottom="27"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
dataProvider="{treeData}"
labelField="@label"
dragEnter="tree_dragEnterHandler(event)"
dragOver="tree_dragOverHandler(event)"
dragDrop="tree_dragDropHandler(event)"
showRoot="false">
</mx:Tree>
</s:WindowedApplication>
Versuchen Sie, alle Ihre Logik in dragEnterHandler setzen - Dokumentation besagt, dass DragEvent.DRAG_ENTER (nicht DragEvent.DRAG_OVER) –
dragEnterHandler() nur aufgerufen wird, von der Verschleppung zu Beginn einmal verwendet werden soll. Ich möchte die Rückmeldung während des Ziehens basierend auf dem Element unter dem Cursor ändern können. –
Dies passiert, weil Sie die Drag-Feedback-Funktion sofort auf "NONE" setzen, nachdem das eingebaute Drag & Drop-Verhalten des Trees es auf "MOVE" zurücksetzt. [Diese Seite] (http://help.adobe.com/de_DE/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7cfe.html) zeigt zwei Beispiele für Drag & Drop, einen für Nicht-Listen-Steuerelemente und einen für Listen-basierte Steuerelemente (wie z der Baum). In dem auf Listen basierenden Beispiel haben Sie drei Möglichkeiten: Verwenden Sie integriertes Verhalten, rollen Sie Ihr eigenes oder verwenden Sie eine Kombination aus beidem. Wenn Sie das Drag-feedback auf "NONE" setzen, wird es durch das Standardverhalten überschrieben. –