none
GridView DragQuestion : RRS feed

  • 问题

  • Bob你好:
    我在GridView中如下设置使得GridViewItem
    能够拖动,可是在我释放时Item却又会回到原处
    而我想实现的功能是使得我拖拽的Item停留在
    我释放的位置;就比如Windows 8 Metro界面
    上拖拽Tile那样的效果;请教bob在技术上该如何
    实现;
    CanDragItems="True" CanReorderItems="True" AllowDrop="True"



    2012年9月12日 8:56

答案

  • 先拿到坐标,然后 根据在VisualTreeHelper的 FindElementsInHostCoordinates 方法找到 这个点下方的ItemContainer , 再用 ItemContainerGenerator IndexFromContainer 方法 拿到Index。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月14日 7:22
    版主
  • 被数据绑定的Item无法自动拖拽到目标位置,因为它的数据源中的位置是固定的。

    技术上,你需要首先 在 GridView的DragItemsStarting事件中获得你拖拽的目标对象, 包括绑定的Item, ItemContainer以及其Index. 放入拖拽的DataObject中。

    然后,你需要开启你的GroupStyle里面的ItemsPanel的AllowDrop="True", 然后实现DragEnter, DragOver等事件, 处理在拖拽结束后,根据拖拽对象来对数据源进行重排。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月13日 9:06
    版主

全部回复

  • 被数据绑定的Item无法自动拖拽到目标位置,因为它的数据源中的位置是固定的。

    技术上,你需要首先 在 GridView的DragItemsStarting事件中获得你拖拽的目标对象, 包括绑定的Item, ItemContainer以及其Index. 放入拖拽的DataObject中。

    然后,你需要开启你的GroupStyle里面的ItemsPanel的AllowDrop="True", 然后实现DragEnter, DragOver等事件, 处理在拖拽结束后,根据拖拽对象来对数据源进行重排。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月13日 9:06
    版主
  • Bob请教下、在Drag事件中;我如何在CodeBehind中知道当前拖拽的GridViewItem释放时候应该设置的位置Index是哪里呢?是根据坐标吗?还是根据什么来了解拖拽释放时GridViewItem释放时候应该设置的位置
    2012年9月14日 2:37
  • 先拿到坐标,然后 根据在VisualTreeHelper的 FindElementsInHostCoordinates 方法找到 这个点下方的ItemContainer , 再用 ItemContainerGenerator IndexFromContainer 方法 拿到Index。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月14日 7:22
    版主
  • Bob_Bao   如何在 GridView的DragItemsStarting事件中获得你拖拽的目标对象, 包括绑定的Item, ItemContainer以及其Index
    2013年9月27日 7:26