我正在使用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属性中我找到了我的对象,但整个方法看起来有点脆弱,我不相信这是正式的做法。
还有更好的方法吗?
答案 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();
}
}
它完成了..