WPF 4多点触控拖放

时间:2010-07-07 00:13:09

标签: wpf drag-and-drop .net-4.0 multi-touch

我有一个WPF 4应用程序,我使用标准DragDrop.DoDragDrop方法实现拖放,但我使用touch而不是Mouse事件来做。

我的网格XAML(我正在拖动)如下:

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

现在背后的代码是这样的:

    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
    }

但是当我尝试用一​​根手指拖动而另一根手指(例如,不同的手,这会模拟两个人)时,第二次触摸似乎没有正确注册,事实上,似乎窗户认为我的两个手指正在试图缩放(就像捏手势)......

有没有人知道解决这个问题的方法?

非常感谢 标记

2 个答案:

答案 0 :(得分:4)

对于多点触控,您将需要使用Surface Toolkit for Windows Touch。它包括适用于多点触控场景的拖放式框架。它包括drag-and-drop framework。该链接包括几个操作方案。

答案 1 :(得分:1)

虽然这只是一个有根据的猜测,但我会说DragDrop.DoDragDrop()无法并行处理多个拖动客户。

指数:

  • 不可能将触摸ID传递给方法(这对于区分正在进行的拖动手势是必要的)
  • DoDragDrop()的实施是静态的
  • DoDragDrop()的通话阻止,直至发生跌落或被取消
  • 它基于拖放的OLE版本(Win7未更新)

但是,如果有人能在这件事上纠正我,我会很高兴,因为我目前也正在搜索适合触摸支持的DND API。

此致 七