2014-02-11 2 views
2

У меня есть приложение wpf, которое я написал в Windows 7 и отлично работал. Я переношу на окна 8.1, и события касаний действуют совершенно иначе.wpf touch desktop app in windows 8

Я написал элемент управления, который будет переключаться на позиции при перетаскивании на другой элемент управления одним и тем же типом. Ниже перечислены обработчики previewTouchDown и Drop для элемента управления.

private void UserControl_PreviewTouchDown(object sender, TouchEventArgs e) 
    { 
     DragDrop.DoDragDrop(this, _comparisonElement, DragDropEffects.Copy); 
    } 

private void UserControl_Drop(object sender, DragEventArgs e) 
    { 
     ComparisonCopy from = (ComparisonCopy)e.Data.GetData("comparisonFormat"); 
     ComparisonCopy to = (ComparisonCopy)_comparisonElement.GetData("comparisonFormat"); 

     if (from != to) 
     { 
      ComparisonEventArgs args = new ComparisonEventArgs(); 
      args.from = from; 
      args.to = to; 

      this.ComparisonMoved(sender, args); 

      e.Handled = true; 
     } 
    } 

Выполнение этого в Windows 8.1 заставляет перетаскивание работать один раз. Как только он работает, он больше никогда не будет работать. Кажется, что начальное перетаскивание находится в застрявшем состоянии.

Я пробовал использовать событие DragMove, которое позволит переключаться несколько раз, однако оно будет случайным образом переключать элементы управления. Как только я коснусь другого элемента управления на экране, он заменит последний элемент управления этим. Опять же, похоже, трогательно застрял.

Выполнение этого с помощью мыши работает в 100% случаев.

Благодарим за помощь. -Matt

ответ

2

Я использовал пример кода из этого сообщения Drag-and-Drop with Touch on Windows 7 с Windows 8.1 и вижу что-то подобное.

Событие Drop не срабатывает, пока не будет изменен код для управления TouchMove вместо TouchDown. То, что я в конечном итоге заключается в следующем:

<StackPanel> 
    <Label Content="StackOverflow" HorizontalAlignment="Center" 
      TouchMove="Label_TouchMove" /> 
    <Label Content="Drag to here" 
      HorizontalAlignment="Center" 
      AllowDrop="True" Drop="Label_Drop" /> 
</StackPanel> 

// Drag source 
private void Label_TouchMove(object sender, TouchEventArgs e) 
{ 
    Label l = e.Source as Label; 
    DragDrop.DoDragDrop(l, l.Content + " was Dragged!", DragDropEffects.Copy); 
} 

// Drag target 
private void Label_Drop(object sender, DragEventArgs e) 
{ 
    string draggedText = (string)e.Data.GetData(DataFormats.StringFormat); 
    Label l = e.Source as Label; 
    l.Content = draggedText; 
} 

Но теперь дополнительный TouchMove обжигают после перетаскивания завершена. Я не могу найти причины для этого.

Смежные вопросы