列表框拖动重排序:已删除项目的索引

时间:2011-01-31 13:43:44

标签: silverlight drag-and-drop listbox

我正在使用Listbox包裹在ListBoxDragDropTarget内(来自Silverlight工具包)。 此ListBox可以由用户手动重新排序。但是,最后一项必须始终位于ListBox的底部,并且根本无法移动。我找到了一种方法来取消最后一项移动,但是如果我将另一项拖放到这最后一项,它就会被移动。

我可以在ListBox的Drop事件中使用此代码找到拖动项的索引:

object data = e.Data.GetData(e.Data.GetFormats()[0]);

ItemDragEventArgs dragEventArgs = data as ItemDragEventArgs;
SelectionCollection selectionCollection = dragEventArgs.Data as SelectionCollection;
if (selectionCollection != null)
{
    MyClass cw = selectionCollection[0].Item as MyClass;
    int idx = selectionCollection[0].Index.Value;   
}

但是这只能在拖动操作之前给出索引。

我的问题如下:有没有办法知道被删除项目的索引?这样,如果index =列表的最后位置,我可以将它移动到forelast位置。

提前致谢!

2 个答案:

答案 0 :(得分:4)

好的,我找到了一种方法。我绑定了ItemDragCompleted的{​​{1}}事件,并执行了以下操作:

ListBoxDragDropTarget

}

由于DragSource表示列表框,使用新的“排列”项目,因此我可以检查项目现在是否位于最后,并在这种情况下移动它。

唯一的问题是,由于项目被丢弃然后移动,它会导致屏幕上的闪烁。

我仍然接受任何其他(最佳)建议。

答案 1 :(得分:2)

我有同样的问题。我认为可以遍历ListBox中项目的矩形,看看 var point = args.GetPosition(myListBox); 是否在其中。但我希望有一个更简单的方法...

编辑:但问题是,你没有得到已经内置在silverlight中的重力效果,其中只有上半部分和下面一半的矩形用于将其放入列表中。