我正在使用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位置。
提前致谢!
答案 0 :(得分:4)
好的,我找到了一种方法。我绑定了ItemDragCompleted
的{{1}}事件,并执行了以下操作:
ListBoxDragDropTarget
}
由于DragSource表示列表框,使用新的“排列”项目,因此我可以检查项目现在是否位于最后,并在这种情况下移动它。
唯一的问题是,由于项目被丢弃然后移动,它会导致屏幕上的闪烁。
我仍然接受任何其他(最佳)建议。
答案 1 :(得分:2)
我有同样的问题。我认为可以遍历ListBox中项目的矩形,看看 var point = args.GetPosition(myListBox); 是否在其中。但我希望有一个更简单的方法...
编辑:但问题是,你没有得到已经内置在silverlight中的重力效果,其中只有上半部分和下面一半的矩形用于将其放入列表中。