需要两个手指才能启动拖放事件

时间:2012-07-06 15:05:02

标签: c# wpf pixelsense

我正在尝试创建一个涉及多个SurfaceListBox元素和子数据项的MS Surface 2.0应用程序。这里的关键交互是以拖放方式在列表框中拖动数据项目(我知道这些文档已被大量记录,我一直在阅读)。

我一直在使用MSDN文章provided here来回答我关于如何在Surface中发生整个拖放事件的一些问题,但我肯定还在学习。他们提到的一件事是,可能需要两次触摸来启动拖放事件,以便仍然可以使用一根手指来滚动列表框。但是,我似乎无法让代码工作。

        //The following 15 lines are provided for background.
        FrameworkElement findSource = e.OriginalSource as FrameworkElement;
        SurfaceListBoxItem draggedElement = null;

        // Find the touched SurfaceListBoxItem object.
        while (draggedElement == null && findSource != null)
        {
            if ((draggedElement = findSource as SurfaceListBoxItem) == null)
            {
                findSource = VisualTreeHelper.GetParent(findSource) as FrameworkElement;

                btnEditProj.Visibility = System.Windows.Visibility.Visible;
                btnDeleteProj.Visibility = System.Windows.Visibility.Visible;
            }

        }

        //THIS IS THE PART IN QUESTION.
        if (draggedElement == null || draggedElement.TouchesCapturedWithin.Count == 0)
        {
        return;
        }

我可以看到第一部分检查元素是否仍然没有被识别为SurfaceListBoxItem,第二部分检查它是否在同一个启动之前被触摸过(这需要两个手指,然后) ,但它抛出一个错误,说它不能,首先,那种带有方法组和整数的运算符,并且在将其更改为单个等号(=)后,告诉我我不能使用||在bool和方法组之间。

一般来说,我仍然是C#的新手,所以我假设我在这里缺少某种简单的语法或逻辑元素,或者如果MS实现了TouchesCapturedWithin从SDK 1.0改为2.0(或者我只是不能将代码转移到正确的部分),但如果有人能把我推向正确的方向,我会很感激。谢谢!

1 个答案:

答案 0 :(得分:2)

我想我已经解决了我的问题。

就像我说的那样,我还在学习,所以我对于质疑自己对所写内容的怀疑犹豫不决。但是,在这个例子中使用的“Count”是一种方法(由于intellisense告诉我使用小于和大于(<>)的符号,因此在代码中抛弃了我,所以我认为它不是一种方法。)但是,在用它后的括号中尝试该行:

    if (draggedElement == null || draggedElement.TouchesCapturedWithin.Count() == 0) 
        { 
        return; 
        } 

我发现它实际上正确地跟踪了一个和两个手指。

我想MSDN改变了Surface 1.0和2.0之间实现TouchesCapturedWithin.Count()方法的方式?或者有人没有测试那部分代码...