所以我在flex 4中使用自定义皮肤这个titledborderbox,我正在处理拖放应用程序,我遇到了一些问题。
当我开始拖放该组件时,我可以拖动它的子项,但不能拖动titledborderbox本身,例如:我可以抓住这个盒子里面的标签或按钮,我可以开始拖动它但这不是一个理想的功能。我应该能够点击titledborderbox上的任意位置并将整个组件与其子项一起拖动到新位置。我已经尝试过mouseChildren = false,但是禁用了子节点上的事件,因为有些子节点是我必须能够进行交互的按钮。有没有解决这个问题,怎么能解决?
我的titledborderbox容器在HGroup中,我希望能够将titledborderbox放在特定的位置,例如:如果我有4个标题的borderbox容器并且我开始拖动最后一个,那么我希望能够将它放在HGroup容器中的位置1,但是拖动管理器总是将删除的项目作为组中的最后一项放置,是否有任何解决方案?
我必须使用这种布局,我不能改变到其他布局,我找不到任何我想要实现的体面的例子,是否可能?任何帮助表示感谢,谢谢。这是我的拖动代码:
private function handleStartDrag( evt:MouseEvent ):void
{
// grab the item renderer and relevant data
var dragItem:IUIComponent = evt.target as IUIComponent;
var dragSource:DragSource = new DragSource();
dragSource.addData( dragItem, "item" );
DragManager.doDrag( dragItem, dragSource, evt );
this.buttonMode = true;
}
protected function handleDragEnter( evt:DragEvent ):void
{
if( evt.dragSource.hasFormat( "item" ) )
DragManager.acceptDragDrop( evt.target as IUIComponent );
}
protected function handleDragDrop( evt:DragEvent ):void
{
var dragItem:Object = evt.dragSource.dataForFormat( "item" );
var dragItemOwner:Group = ( dragItem.owner as Group );
dragItemOwner.removeElement( dragItem as IVisualElement );
var targetOwner:Group = ( evt.target as Group );
targetOwner.addElement( dragItem as IVisualElement );
}
答案 0 :(得分:0)
尝试更改
DragManager.acceptDragDrop( evt.target as IUIComponent );
到
DragManager.acceptDragDrop( evt.currentTarget as IUIComponent );
event.target是对“引发”事件的对象的引用(可能是您框内的图像或文本字段)。 event.currentTarget是对绑定事件侦听器(对象框)的对象的引用。
另一种选择可能是将您的box的mouseChildren属性设置为false,以便它们不会触发MouseEvents。但这只有在孩子不应该发射MouseEvent的情况下才有用。