如何通过拖放在一个大的垂直列表中重新排序项目,同时保持垂直可滚动性?

Hei*_*cht 6 c# silverlight scroll drag-and-drop windows-phone-7

Windows Phone上有很多关于Drag and Drop的提示,但我目前无法将所有内容放在一起.所以我希望你能给我一些建议来实现我的目标:显示具有良好重新排序和滚动体验的可滚动项目列表.

我使用a StackPanel来显示控件的垂直列表.假设这些控件正在CheckBoxes显示一些信息(实际上我创建了一些更复杂的自定义控件).可以有很多项目,所以我放了一个ScrollViewer,StackPanel所以用户可以上下滚动.但是现在我还想让用户有机会通过拖放重新排序列表中的控件.

我不清楚几件事情:

  1. 如何在StackPanel中启用拖放功能?(因此它看起来很流畅,并且项目在动画中改变位置,很好看,方式;当用户拖动它时,它们应该为要插入的项目留出空间.)
  2. 如何才能实现用户可以垂直滚动列表,同时还能拖放项目?(我认为用户必须拖动的每个项目都可能有一个特殊的"拖动点",所以我可以区分拖动和滚动.)
  3. 如果列表大于屏幕,当用户将一个项目拖动到上边框或下边框时,如何自动滚动列表?
  4. 这甚至是控制的正确组合吗?还有更好的吗?(但我不想手动计算项目位置.)

我很想听听你对这个话题的看法,非常感谢任何帮助!