0

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

我一直在使用此处提供的 MSDN 文章来回答一些关于整个拖放事件如何在 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,第二部分检查它是否在同一启动中被触摸过(然后需要两个手指),但它抛出一个错误,说明它首先不能有那种带有方法组和整数的运算符,并且在将其更改为单个等号 (=) 后,告诉我我不能使用 || 在布尔值和方法组之间。

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

4

1 回答 1

2

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

就像我说的,我还在学习,所以我犹豫着质疑自己对所写内容的怀疑。但是,此示例中使用的“计数”是一种方法(这让我在代码中感到失望,因为智能感知告诉我使用小于和大于 (<>) 符号,所以我认为这不是一种方法.) 但是,在尝试用括号括起来的那一行时:

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

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

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

于 2012-07-10T14:02:28.183 回答