WPF 4 мультитач перетаскивание - PullRequest
5 голосов
/ 07 июля 2010

У меня есть приложение WPF 4, в котором я реализовал перетаскивание с использованием стандартного подхода DragDrop.DoDragDrop, но я делаю это с использованием касания вместо событий мыши.

Мой 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
    }

НО , когда я пытаюсь перетащить одним пальцем, в то время как уже перетаскиваю другим пальцем (например, разные руки, которые имитируют двух человек), вторые касания, кажется, не регистрируются должным образом, на самом деле кажется, что Windows думает, что мои два пальца пытаются масштабировать (как жест щепотки) ...

Кто-нибудь знает способ обойти это?

Большое спасибо Mark

Ответы [ 2 ]

4 голосов
/ 29 августа 2010

Для мультитач вы захотите использовать Surface Toolkit для Windows Touch. Он включает в себя среду перетаскивания, подходящую для сценариев с несколькими касаниями. Он включает в себя drag-and-drop framework . Эта ссылка включает несколько сценариев с практическими рекомендациями.

1 голос
/ 12 августа 2010

Хотя это только обоснованное предположение, я бы сказал, что DragDrop.DoDragDrop() не способен обрабатывать несколько гостевых перетаскиваний параллельно.

Индексы:

  • Нет возможностипередать сенсорный идентификатор методу (который необходим для дифференциации текущих жестов перетаскивания)
  • Реализация DoDragDrop() является статической
  • Вызов DoDragDrop() блокируется до сбросапроизошел или был отменен
  • Он основан на OLE-версии перетаскивания (которая не была обновлена ​​для Win7)

Однако я был бы рад, если бы кто-то мог исправить меня вэтот вопрос, потому что в настоящее время я также ищу API DND, подходящий для сенсорной поддержки.

С уважением, Семь

...