我正在尝试创建一个涉及多个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(或者我只是不能将代码转移到正确的部分),但如果有人能把我推向正确的方向,我会很感激。谢谢!
答案 0 :(得分:2)
我想我已经解决了我的问题。
就像我说的那样,我还在学习,所以我对于质疑自己对所写内容的怀疑犹豫不决。但是,在这个例子中使用的“Count”是一种方法(由于intellisense告诉我使用小于和大于(<>)的符号,因此在代码中抛弃了我,所以我认为它不是一种方法。)但是,在用它后的括号中尝试该行:
if (draggedElement == null || draggedElement.TouchesCapturedWithin.Count() == 0)
{
return;
}
我发现它实际上正确地跟踪了一个和两个手指。
我想MSDN改变了Surface 1.0和2.0之间实现TouchesCapturedWithin.Count()方法的方式?或者有人没有测试那部分代码...