2014-02-11 82 views
2

我有一個wpf應用程序,我在Windows 7中編寫和完美工作。我正在移植到Windows 8.1,觸摸事件的行爲完全不同。wpf觸摸桌面應用程序在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並且看到類似的東西。

直到更改代碼來處理TouchMove而不是TouchDown時,Drop事件纔會觸發。我最終得到的是:

<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。我找不到這種事發生的理由。

相關問題