gpt4 book ai didi

c# - 使用 MVVM 从列表拖放到 Windows Phone 上的 Canvas

转载 作者:行者123 更新时间:2023-11-30 12:45:48 24 4
gpt4 key购买 nike

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

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

试图从 msdn project 中复制代码我最终遇到了无法从 DragEventArgs 获取有关元素的相同信息的问题。

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

感谢任何帮助。

想法

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

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

最佳答案

没有样本或任何东西可以实现这一点。我已经联系了 msdn 和 Microsoft 的人,但没有成功。我正在尝试构建一个示例,但到目前为止没有成功。

编辑

那么我是如何解决这个问题的:首先是图形化的问题 enter image description here

换句话说,将一个元素从列表框拖到 Canvas 上。所以我做了什么,我在 View 中像这样向列表框添加了处理程序:

        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);

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

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

但我没有使用拖放功能或相关事件,因为它似乎没有帮助,因为缺少可拖动元素。但这有效:)

关于c# - 使用 MVVM 从列表拖放到 Windows Phone 上的 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22859855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com