【问题标题】:PixelSense Surface 2.0 - Drag and drop out of a UserControl onto a ScatterView and vice-versaPixelSense Surface 2.0 - 从 UserControl 拖放到 ScatterView 上,反之亦然
【发布时间】:2012-11-21 11:47:38
【问题描述】:

以前我尝试将对象从LibraryContainer 拖放到ScatterView 上,反之亦然,这很简单,因为LibraryContainerLibraryStackLibraryBar 支持拖放默认情况下的事件。结合 Surface 2.0 SDK 提供的 ShoppingCart 示例中的DragDropScatterView.cs 非常简单。

现在我希望能够将UserControl 拖放到ScatterView4 上,反之亦然,例如:http://goo.gl/zZIdg

根据我的研究,有一种方法可以做到这一点,可以在这里找到:http://msdn.microsoft.com/en-us/library/ff727736.aspx。但是,这里他们不使用DragDropScatterView.cs,它以不同的方式完成。您有两个 ObservableCollections(一个源和一个目标),ScatterViewItemsSurfaceListBox

在这个例子中我不喜欢的一点是,可以拖动的ScatterViewItems 并没有真正的缩放属性,因为当用户点击ScatterViewItem 时,它会创建一个视觉样式并隐藏ScatterViewItem 当你放下它时,它会更新 ScatterViewItem 的坐标和方向并使其可见。我决定不走这条路,因为我想要一个正常的ScatterViewItem 行为。

我想要做的基本事情是拥有一个Label,在旁边有一个ScatterView,并且能够拖动Label(创建一个视觉光标 - 已经完成)并放下它在ScatterView 上,创建一个与原始Label 具有相同属性的ScatterViewItem。我尝试使用DragDropScatterView.cs 执行此操作,但是当我使用Label 时,我的droppingCursor.Data(在DragDropScatterView.cs)是null,我认为这是因为draggedElement.DataContext(在LabelView.xaml.cs ) 也是null,但是当我有SurfaceListBox 时,这不是null

我在这里提供了一个代码示例:http://sdrv.ms/VDuHq5。在SurfaceWindow1.xaml 中有TagVisualizationScatterView 的容器,LabelView.xaml`TagVisualization 内部调用。

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

    标签: c# wpf xaml pixelsense


    【解决方案1】:

    我设法解决了我的问题,这里简要说明我是如何做到的:

    我搜索并找到了this。然后我将这个SurfaceListBox 与这些拖放事件一起使用,并将它与DragDropScatterView 类结合使用,因此每次创建新的ScatterViewItem 时,我都会对我的自定义对象进行正常的ScatterView 控制。使用此方法,您还必须创建一个视觉光标,即当您从 SurfaceListBox 拖动项目时将看到的内容。

    令我困惑的事情是 Serge Calderara(来自 MSDN Surface 论坛)帮助我解决的问题是,我一直试图将这些拖放事件关联到 Label,甚至是 UserControl ,但我以错误的方式看待事物。在大多数情况下,对您来说最好的解决方案是拥有一个容器,并在该容器中放置您想要的UserControls,并且您只将拖放事件与该容器相关联,而不是与每个单独的项目相关联。考虑到这一点,把东西放在一起很容易,我创建了我的UserControls 并用ItemTemplateSelector 填充了SurfaceListBox (这是我的容器),我为ScatterView 使用了相同的选择器(这是接收容器中的物品)。在我的对象类中,我刚刚定义了一个变量来保存我将拥有的UserControl 类型并相应地返回DataTemplate

    有了这个,我创建了一个SurfaceListBox,其中包含两个自定义的用户控件,我可以将它们拖放到ScatterView 并返回。可以在此处找到具有 MVVM 模式的工作示例:http://sdrv.ms/10SjKaH

    我希望它可以帮助别人,它帮助了我。如果您有任何问题或建议,请随时提出/告诉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2014-11-08
      • 2012-02-16
      • 2013-08-16
      • 2012-06-27
      • 2017-02-05
      相关资源
      最近更新 更多