将项目从DataGridDragDropTarget拖动到Label

时间:2012-01-22 19:28:23

标签: c# silverlight silverlight-4.0 drag-and-drop silverlight-toolkit

我正在使用Silverlight Toolkit中的ListBoxDragDropTarget(2010年4月)和SL 4。

我想将列表框中的项目拖到Label并在那里处理放置事件。

但是看起来有点复杂。 Drop的常规Label事件永远不会被触发。我想那是因为Silverlight Toolkit有自己的处理Drag& amp;丢弃只是部分兼容。

环顾四周,我找到了Microsoft.Windows.DragDrop.DropEvent并为此事件附加了一个处理程序。它工作了!!我收到了Drop个活动。但是我不确定如何到达被拖动的真实对象(string)。

我试过e.Data.GetData(typeof(string))但我一无所获。查看可用格式,有一个System.Windows.Controls.ItemDragEventArgs对象。在这里我发现了一个System.Collections.ObjectModel.Selection数组,然后有一个Item属性。我想在这个Item属性中我找到了我的对象,但整个方法看起来有点脆弱,我不相信这是正式的做法。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

你也可以使用另一个ListBox 例如:include namespace

 xmlns:toolKit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"

让我们在Grid中添加“ListBoxDragDropTarget”。将属性“AllowDrop”设置为True。一旦设置为true,它将能够捕获控件内的drop事件。 现在我们将在ListBoxDragDropTarget中添加一个ListBox,并设置你喜欢的属性。假设

 <toolKit:ListBoxDragDropTarget AllowDrop="True">
   <ListBox x:Name="customerListBoxMain" Height="200" Width="200"
       DisplayMemberPath="Name">
    <ListBox.ItemsPanel>
      <ItemsPanelTemplate>
           <StackPanel Orientation="Vertical"/>
      </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
   </ListBox>
  </toolKit:ListBoxDragDropTarget>

并添加另一个ListBox

  <toolKit:ListBoxDragDropTarget AllowDrop="True">
    <ListBox Height="200" Width="200" DisplayMemberPath="Name">
   <ListBox.ItemsPanel>
    <ItemsPanelTemplate>
      <StackPanel Orientation="Vertical"/>
    </ItemsPanelTemplate>
   </ListBox.ItemsPanel>
   </ListBox>
  </toolKit:ListBoxDragDropTarget>

现在获取一些数据并将其从后面的代码设置为第一个ListBox的Source。以下是示例代码:

  public partial class MainPage : UserControl
  {
     public MainPage()
     {
        InitializeComponent();

        customerListBoxMain.ItemsSource = PersonDataProvider.GetData();
     }
   }

它完成了..