10.5.启动和禁止拖操作

10.5.1. 问题
你想在运行时启动和禁止列表类控件的拖拽操作。
10.5.2. 解决办法
使用列表类控件的拖拽事件属性来管理属性值。
10.5.3 讨论
Flex 框架的列表类控件具有内置的管理器来与DragManager 互动,通过使用dragEnabled和dropEnabled 属性,提供了一个便捷的途径来启动控件响应拖拽动作。通过使用内建的事件属性dragStart, dragEnter,dragOver, dragExit, dragDrop 和dragComplete,你可以像在任何其它UIComponent 驱动的程序中一样设置事件处理器。

为了启动一个列表类控件接收拖拽动作,你可以设置该控件实例的dragEnabled 属性的布尔值。列表类控件具有单向或者双向的拖拽能力。在一个单向的体系中,该控件实例能够接受释放动作或者允许拽动。在双向体系中,该控件允许拽动和释放动作都执行。

通过指派DragManager 发出的拖拽事件的处理器,从而对程序中怎样处理事件和拖拽源数据进行管理。下面的例子为dragEnter 事件创建一个事件处理器,从而决定在两个List 控件中是否允许或禁止拖拽动作。
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="horizontal"
creationComplete="creationHandler();">

<mx:Script>
<![CDATA[
import mx.events.DragEvent;
import mx.collections.ArrayCollection;
[Bindable]
public var isEnabled:Boolean = true ;
private static const DIS_LABEL:String = "disable drag and drop";
private static const EN_LABEL:String ="enable drag and drop";
private function creationHandler():void {
list1.dataProvider = new ArrayCollection(['Spider Monkey''Orangutan''Gorilla']);
list2.dataProvider = new ArrayCollection(['Lion''Cheetah''Puma'])}
private function clickHandler():void {
enableBtn.label = ( enableBtn.label == DIS_LABEL )? EN_LABEL: DIS_LABEL;
isEnabled = !isEnabled;
}
private function dragEnterHandler( evt:DragEvent ):void{
evt.target.dropEnabled = ( evt.target !=evt.dragInitiator );
}

]]>
</mx:Script>
<mx:VBox width="100%height="100%">
<mx:Button id="enableBtnlabel="disable drag and dropclick="clickHandler();" />
<mx:HBox width="100%height="100%">
<mx:List id="list1width="200height="200dragEnabled="{isEnabled}"
dragMoveEnabled="truedragEnter="dragEnterHandler(event);" />

<mx:List id="list2width="200height="200dragEnabled="{isEnabled}dragMoveEnabled="truedragEnter="dragEnterHandler(event);" />
</mx:HBox>
</mx:VBox>
</mx:Application>

每一个list 是否允许拖拽动作取决于本地类绑定的isEnabled 属性,isEnabled 由按钮的点击事件处理器更新。如果这些列表控件允许拖拽动作,当鼠标指针进入该组件范围并且选择其中一个条目时,dragEnter 事件被发出。

通过在一个list 里设置dragMoveEnabled 为true,拖拽完成时你执行的是一个移动的动作。

默认地,dragMoveProperty 属性为false,这意味着当一个拖拽操作完成,拖拽源数据对象将会从拖拽初始器被复制到释放目标。

为了确保数据不会在一个List 实例中移动,每一个组件的dropEnabled 属性值紧跟着dragEnter 事件后更新。dragEnterHandler 事件处理器检查释放目标是否跟拽动初始器相同并且更新dropEnabled 属性值。要禁止一个初始了拽动的组件执行释放操作,dropEnabled属性应该设置为false。

加支付宝好友偷能量挖...


评论(0)网络
阅读(131)喜欢(0)flash/flex/fcs/AIR