列表框在WPF中使用触摸拖放问题

时间:2014-03-22 19:48:18

标签: c# wpf drag-and-drop listbox

我有一个WPF应用程序,其中包含一个列表框和一些项目。在这之间我还添加了虚拟物品,以便我可以在这些物品之间拖放。

我实现了拖放操作,它与鼠标完美配合。触摸它有效,但不是我想要的方式。如果未选择列表框项目,使用触摸拖放工作但没有任何拖放效果,我想我将不得不为此创建Adorner。但是当选择列表框项时,拖放操作不起作用。我必须手动取消选择该项目然后它的工作原理。即使是UnSelectAll()方法也没有用。

我只是想知道应该如何为触控设备实现拖放?

代码段如下:

private void s_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    if (sender is ListBoxItem)
    {
        ListBoxItem draggedItem = sender as ListBoxItem;
        System.Windows.DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);
        draggedItem.IsSelected = true;
    }
}
private void s_PreviewTouchDown(object sender, TouchEventArgs e)
{
    if (sender is ListBoxItem)
    {
        ListBoxItem draggedItem = sender as ListBoxItem;
        System.Windows.DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);
        draggedItem.IsSelected = true;
        e.Handled = true;
    }
}
private void listbox1_Drop(object sender, DragEventArgs e)
{
    ItemTemplate droppedData = e.Data.GetData(typeof(ItemTemplate)) as ItemTemplate;
    ItemTemplate target = ((ListBoxItem)(sender)).DataContext as ItemTemplate;

    int removedIdx = listBox1.Items.IndexOf(droppedData);
    int targetIdx = listBox1.Items.IndexOf(target);

    Swap<ItemTemplate>(AppsList, targetIdx, removedIdx);
}

任何帮助将不胜感激。 WPF中的Listbox是否存在触摸问题?

1 个答案:

答案 0 :(得分:0)

没有。您无法使用通用WPF ListBox正确使用触摸事件。尝试使用Surface listBox。 SurfaceListBox