Flex内置了用于列表控件的拖放操作,并允许您覆盖它。 但他们并没有在例子中说明这一点。 内置功能会自动拖动列表项,如果要覆盖它,则会发现列表本身正在设置处理程序。 我特别想做的是,我的TileList显示了我可以拖到大画布上的项目的小缩略图。 当我从列表中拖动项目时,拖动代理应该是不同的图像。

所以,我遵循建议的技术,只有在代理图像上明确设置宽度/高度时它才有效。 为什么?

===============>>#1 票数:3

这是不明显的,直到你尝试了它=)几周前我在同样的事情上挣扎。 这是我的解决方案:

名单:

<List>
  <mouseDown>onListMouseDown(event)</mouseDown>
</Tree>

鼠标按下处理程序:

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
  );
}

当用户单击列表中的项目时,这将开始拖动。 请注意,我没有在列表中设置dragEnabled和其他与拖动相关的属性,因为我自己处理了所有这些。

将它添加到事件处理程序的开头可能很有用:

if ( event.target is ScrollThumb || event.target is Button ) {
  return;
}

如果用户点击滚动条中的某个位置,则只是短路。 它不是很优雅,但它可以完成这项工作。

===============>>#2 票数:1

我在这里找到了一个更简单的答案。 该示例扩展了DataGrid控件,但您可以对List控件执行相同操作。 就我而言,我使用的是图像源而不是Class:

public class CustomDragList extends List {

    [Bindable]
    public var dragProxyImageSource:Object;

    override protected function get dragImage():IUIComponent {
        var image:Image = new Image();
        image.width = 50;
        image.height = 50;
        image.source = dragProxyImageSource;
        image.owner = this;
        return image;
    }
}

然后使用这样的自定义列表:

<control:CustomDragList
    allowMultipleSelection="true"
    dragEnabled="true" 
    dragProxyImageSource="{someImageSource}"
    dragStart="onDragStart(event)"/>

其中'someImageSource'可以是您通常用于图像源的任何内容(嵌入,链接等)

  ask by MidnightGun translate from so

未解决问题?本站智能推荐:

4回复

扩展Flex DataGridColumn以实现自定义排序功能

我伸出的DataGridColumn,因为我想有一个自定义的itemToLabel功能(能够在DataGrid中显示嵌套数据,请参见该问题。 无论如何,它还需要一个自定义的排序功能。 所以我写了这样的排序功能: 在我的CustomDataGridColumn的构造函数中,我输入:
1回复

如何在Flex中的自定义组件之外访问公共功能?

我有一个应用程序宽度为mx:ViewStack组件,每个s:NavigatorContent下都有不同的视图组件,如下所示。 这是package.MyFirstComponent的重要部分。 我试过的 在视图组件中调用somethingToGoForward() ,然后
1回复

在flex中自定义PopUpMenuButton控件

我有一个关于PopUpMenuButton控件的问题。 此控件的现有行为是: “ PopUpMenuButton控件具有两个按钮(主按钮和辅助按钮(看起来像“ v”向下箭头符号))。 当用户单击主按钮时,控件将调度itemClick(MenuEvent.ITEM_CLICK)事件,
2回复

如何在Flex移动应用程序中自定义列表

我的意思是不可能用组件来完成,但我不知道我想要的组件是如何调用的。 我想获得一个列表,但有点“图标外观”。 你可以说某种跳板导航。 如果有人说出我的意思,那真的会对我有所帮助。 这里只是Photoshop中的一个快速草图,它应该是什么样子: http : //imageshack.u
1回复

Flex:自定义菜单功能

有谁知道单击菜单项之一后保持菜单打开的方法吗? 我有一个自定义菜单(扩展了菜单对象),它包含一堆“检查”类型的菜单项,我要满足的要求是允许用户在不关闭菜单的情况下单击多个菜单项,然后拥有菜单失去焦点时关闭,这可能吗? 如果可以的话,请解释一下如何完成(先举一个小例子)。 预先感谢您的任
1回复

Flex 4中自定义组件功能的动态变量

我定义了一个变量,该变量会根据用户交互而动态变化,例如,当用户触摸对象时,对象的ID会设置为变量。 设置ID后,我在与该对象相关的自定义组件中调用一个函数。 像这样; activeObject.videoPlay(event)--->如果activeObject是video1 -
2回复

Flex AdvancedDataGrid树自定义拖动

我想在AdvancedDataGrid树结构上实现自定义拖动,该结构仅允许在分支(而不是叶子)上拖动。 我遇到了很多困难,试图使用MouseDown事件,但是没有运气! 好的,我想我可以通过mousedown来确定该项目是否为叶子的分支。 任何有关如何使用AdvancedDataG
1回复

Flex:如何在主应用程序中调用自定义组件的公共功能?

如何从主应用程序调用自定义组件的公共功能。 例如,我有一个计时器组件MyTimer。 在主应用程序中,我想调用startTimer()或stopTimer()。 在主应用程序中,我有: 在组件中,我有: 有什么建议么? 谢谢。 -Laxmidi
2回复

如何在Flex中调度自定义事件

如何在Flex中调度自定义事件 在我的主要mxml文件中,我已将此代码分派给该函数 在controlmanagerevent中,我已使用此代码 我想问我在想什么,为什么我的customevents不起作用
2回复

如何在flex中自定义HSlider?

我是flex的新手,我想改变HSlider的形象,就像这样 我该怎么办?请举个简单的例子。