使用MVVM将Windows从列表拖放到Windows Phone上的canvas

我有一个应用程序,用户可以使用从列表中选择的元素来操作,这是通过单击列表元素并将元素添加到canvas来完成的。

在用户测试应用程序期间。 人们发现它不是直观的,因为他们想要拖放。 我找到了几个链接,描述了如何为WPF实现这一点,即不适用于Windows Phone。

试图从msdn项目复制代码我最终遇到了一些问题,我无法从DragEventArgs获得有关元素的相同信息。

所以我想要完成的是用户可以将列表框中的元素拖到canvas上。 我已尝试过Viewmodel但在DragEventArgs中缺少信息,如e.Data和e.Source。 我也尝试过在xaml.cs文件中没有成功。

任何帮助表示赞赏。

理念

  • 在选中元素时创建元素的副本,
  • 将副本添加为canvas的子项,
  • 设置副本的x,y坐标以匹配所选元素的位置,
  • CaptureMouse()在副本上。

当然在Windows Phone上操作delta应该用来移动它而不是捕获鼠标。 在Click事件添加元素后,我可以在Canvas中拖动一个元素。 但我似乎无法从列表中拖出工作。 上面的要点是我已经尝试但现在没有任何成功的方法。

没有样本或任何东西来实现这一点。 我已经联系过msdn和微软的人,没有任何成功。 我正在尝试建立一个样本,但到目前为止还没有成功。

编辑

那么我做了什么来解决这个问题:首先是图形问题 在此处输入图像描述

用于将元素从列表框拖动到Canvas的单词。 所以我做了我在这个列表框中添加了处理程序,在视图中:

MyLB.AddHandler(UIElement.ManipulationStartedEvent, new EventHandler(MyLB_ManiStarted), true); MyLB.AddHandler(UIElement.ManipulationDeltaEvent, new EventHandler(MyLB_ManiDelta), true); MyLB.AddHandler(UIElement.ManipulationCompletedEvent, new EventHandler(MyLB_ManiCompleted), true); 

此外,我添加了一个额外的canvas,此后称为Canvas2,它在ListBox和Canvas后面延伸。 两个canvas’之间的唯一区别是大小,否则它们具有相同的itemscontrol但具有绑定到canvas的不同observablecollections’。

  1. 在ManipulationStarted中,我找到了元素并在Canvas2的observablecollection中添加了一个新元素。 此外,我将Canvas2的zindex设置为正面。
  2. 然后我点击delta事件在Canvas2上移动元素
  3. 在ManipulationCompleted中我检查元素是否在第一个Canvas的边界内。
  4. 然后我从Canvas2中删除它,并使用Canvas.SetIndex(UIElement, zIndex)将Canvas2移动到后面
  5. 根据边界检入(3.)然后我将它添加到第一个canvas。 一切正常。

但我不使用dropfunction或相关事件,因为它似乎没有帮助,因为缺少可拖动元素。 但这工作:)

WP7上的Silverlight不支持拖放 – 至少不完全支持。 它支持拖动而不是拖放。

无论如何你可以尝试以下例子,

WP7拖放示例