Windows 8中的wpf touch桌面应用程序

时间:2014-02-11 19:37:03

标签: c# wpf windows touch windows-8.1

我有一个wpf应用程序,我在Windows 7中编写并且工作得很好。我正在移植到Windows 8.1,触摸事件的行为完全不同。

我编写了一个控件,当拖放到另一个相同类型的控件上时,它会切换位置。下面是控件的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

1 个答案:

答案 0 :(得分:2)

我在Windows 8.1中使用了这篇文章Drag-and-Drop with Touch on Windows 7中的代码示例,并且看到了类似的内容。

在更改代码以处理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。我发现没有理由这样做。