以前,我尝试将对象从LibraryContainer拖放到ScatterView上,反之亦然,这很简单,因为默认情况下LibraryContainer,LibraryStack和LibraryBar支持拖放事件。结合使用Surface 2.0 SDK提供的ShoppingCart示例中的DragDropScatterView.cs非常简单。现在我希望能够将UserControl拖放到ScatterView 4上,反之亦然,即类似这样的内容:http://goo.gl/zZIdg。根据我的研究,可以找到一种方法,可以在以下位置找到:http://msdn.microsoft.com/en-us/library/ff727736.aspx。但是,这里他们不使用DragDropScatterView.cs,它以不同的方式进行。您有两个ObservableCollections(源和目标),分别是ScatterViewItems和SurfaceListBox。在此示例中,我不喜欢的一件事是可拖动的ScatterViewItems并没有真正的scale属性,因为当用户单击ScatterViewItem时,它会创建视觉样式并隐藏ScatterViewItem当您放下它时,它会更新该ScatterViewItem的坐标和方向并使它可见。我决定不这样做,因为我想要正常的ScatterViewItem行为。我想做的基本操作是,例如,放置一个Label,并在侧面放置一个ScatterView,并能够拖动该Label(创建可视光标-已经完成)并将其放在,创建一个与原始ScatterView具有相同属性的ScatterViewItem。我尝试使用Label执行此操作,但是当我使用DragDropScatterView.cs时,我的Label(在droppingCursor.Data上)是DragDropScatterView.cs,我认为是因为null(在draggedElement.DataContext上) )也是LabelView.xaml.cs,但是当我有null时,它不是null。我在这里提供代码示例:http://sdrv.ms/VDuHq5。在SurfaceListBox中有SurfaceWindow1.xaml和TagVisualization的容器,ScatterView在LabelView.xaml内部被调用。如果有人可以帮助我,我将非常感激。 最佳答案 我设法解决了我的问题,下面是有关我如何做到的简要说明:我搜索发现this。然后,我将此SurfaceListBox与这些拖放事件一起使用,并将其与DragDropScatterView类组合在一起,因此,每次创建新的ScatterViewItem时,我都会对我的自定义对象进行常规的ScatterView控件。使用此方法,您还必须创建一个视觉光标,即从SurfaceListBox拖动项目时看到的内容。使我感到困惑的是Serge Calderara(来自MSDN Surface论坛)帮助我的事情,是我一直试图将这些拖放事件关联到Label或什至UserControl,但是我用错误的方式看待事物。在大多数情况下,最适合您的解决方案是拥有一个容器,然后将所需的UserControls放入该容器中,并且仅将拖放事件与该容器相关联,而不与每个单独的项目相关联。考虑到这一点,将所有内容放在一起很容易,我创建了UserControls,并在SurfaceListBox(其中是我的容器)中填充了ItemTemplateSelector,然后将相同的选择器用于ScatterView(即接收容器中的物品)。在我的对象类中,我只定义了一个变量来保存我将拥有的UserControl类型,并相应地返回DataTemplate。这样,我创建了一个带有两个自定义UserControl的SurfaceListBox,可以将它们拖放到ScatterView并返回。可以在以下位置找到具有MVVM模式的工作示例:http://sdrv.ms/10SjKaH。我希望它可以帮助他人,也对我有所帮助。如果您有任何疑问或建议,请随时提出/告诉。关于c# - PixelSense Surface 2.0-从UserControl拖放到ScatterView上,反之亦然,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13492598/ 10-16 04:43