2014-02-11 86 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。我找不到这种事发生的理由。

相关问题