C# 使用MVVM在windows phone上从列表拖放到画布

C# 使用MVVM在windows phone上从列表拖放到画布,c#,canvas,windows-phone-8,mvvm,listbox,C#,Canvas,Windows Phone 8,Mvvm,Listbox,我有一个应用程序,用户可以使用从列表中选择的元素进行操作,这是通过单击列表元素完成的,该元素被添加到画布中 在应用程序的用户测试期间。人们发现这不是直观的,因为他们想要拖放。我找到了几个链接,介绍了如何为WPF实现这一点,即不适用于windows Phone 尝试从一个文件中复制代码时,我遇到了一些问题,我无法从DragEventArgs中获得相同的元素信息 所以我想要完成的是,用户可以将列表框中的元素拖到画布上。我在Viewmodel中尝试过,但在DragEventArgs中缺少信息,如e.D

我有一个应用程序,用户可以使用从列表中选择的元素进行操作,这是通过单击列表元素完成的,该元素被添加到画布中

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

尝试从一个文件中复制代码时,我遇到了一些问题,我无法从DragEventArgs中获得相同的元素信息

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

感谢您的帮助

创意

  • 选定图元后,创建该图元的副本
  • 将副本添加为画布的子级
  • 设置副本的x、y坐标以匹配选定元素的位置
  • 副本上的CaptureMouse()

当然,在Windows Phone上,应该使用delta来移动鼠标,而不是捕获鼠标。通过单击事件添加元素后,我可以在画布内拖动元素。但我似乎无法从列表中拖拽到工作中。上面的要点是我已经尝试过的一种方法,但到目前为止没有任何成功。

WP7上的Silverlight不支持拖放操作–至少不完全支持。它支持拖动,但不支持拖放

不管怎样,你可以用下面的例子试试


没有样本或任何东西可以实现这一点。我已经联系了msdn和微软的人,但没有成功。我试图建立一个样本,但迄今为止没有成功

编辑

所以我做了什么来解决这个问题:首先,以图形的方式解决这个问题

换句话说,将元素从列表框拖动到画布。因此,我在视图中向列表框添加了如下处理程序:

        MyLB.AddHandler(UIElement.ManipulationStartedEvent, new EventHandler<ManipulationStartedEventArgs>(MyLB_ManiStarted), true);
        MyLB.AddHandler(UIElement.ManipulationDeltaEvent, new EventHandler<ManipulationDeltaEventArgs>(MyLB_ManiDelta), true);
        MyLB.AddHandler(UIElement.ManipulationCompletedEvent, new EventHandler<ManipulationCompletedEventArgs>(MyLB_ManiCompleted), true);
MyLB.AddHandler(UIElement.manipationstartedEvent,新事件处理程序(MyLB\u manistart),true);
AddHandler(UIElement.ManipulationDeltaEvent,新事件处理程序(MyLB_manidta),true);
MyLB.AddHandler(UIElement.operationCompletedEvent,新事件处理程序(MyLB\u manipleted),true);
此外,我还添加了一个额外的画布,在这里被称为Canvas2,它延伸到列表框和画布的后面。 两个画布的唯一区别是大小,否则它们具有相同的itemscontrol,但绑定到画布的observablecollections不同

  • 在ManufactionStarted中,我找到元素并将一个新元素添加到画布2的observablecollection中。此外,我将画布的zindex设置为在前面
  • 然后我点击delta事件,在画布2上移动元素
  • 在操纵完成中,我检查元素是否在第一个画布的边界内
  • 然后我从Canvas2中删除它,并使用
    Canvas.SetIndex(UIElement,zIndex)
  • 根据边界签入(3),我将其添加到第一个画布。一切正常

  • 但是我没有使用drop特性或相关事件,因为它似乎没有帮助,因为缺少dragable元素。但这是可行的:)

    我已经在画布中启用了拖动功能。我可以在WP8中看到allowdrop确实存在。这是自wp7以来更新的。但我没能让它工作。