WPF 4 multi-touch drag and drop

坚强是说给别人听的谎言 提交于 2019-12-21 17:19:16

问题


I have a WPF 4 application where I have implemented Drag and Drop using the standard DragDrop.DoDragDrop approach, but Im doing it using touch instead of Mouse events.

My XAML for my Grid (that Im dragging) is as follows:

<Grid x:Name="LayoutRoot" 
      ManipulationStarting="ManipulationStarting" 
      ManipulationDelta="ManipulationDelta" 
      ManipulationCompleted="ManipulationCompleted"
      IsManipulationEnabled="True">
    <!-- children in here -->
</Grid>

Now the code behind is like this:

    private void ManipulationStarting(object sender, ManipulationStartingEventArgs e)
    {
        e.ManipulationContainer = this;
        e.Handled = true;
    }

    private void ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {
        e.Handled = true;
        DragDrop.DoDragDrop(this, new DataObject(GetType(), this), DragDropEffects.Move);
    }

    private void ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
    {
        //completed stuff
    }

BUT when I try to drag with one finger while already dragging with another finger (different hands for example, which would simulate two people) the second touches don't seem to register properly, infact, it seems that windows thinks that my two fingers are trying to scale (like a pinch gesture)...

Does anyone know a way to get around this?

Thanks a lot Mark


回答1:


For multi-touch, you're going to want to use the Surface Toolkit for Windows Touch. It includes a drag-and-drop framework suitable for multi-touch scenarios. It includes a drag-and-drop framework. That link includes several how-to scenarios.




回答2:


Although this is just an educated guess, I would say that DragDrop.DoDragDrop() is not capable to handle multiple drag guestures in parallel.

Indices:

  • There's no possibility to pass a touch ID to the method (which would be neccessary for differentiating the ongoing drag gestures)
  • The implementation of DoDragDrop() is static
  • The call of DoDragDrop() is blocking until the drop occured or was canceled
  • It is based upon the OLE version of drag and drop (which was not updated for Win7)

However, I would be glad if someone could correct me in this matter, because I'm currently also searching an DND API suitable for touch support.

Regards, Seven



来源:https://stackoverflow.com/questions/3191084/wpf-4-multi-touch-drag-and-drop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!