捕获ItemsControl项中的单击事件

时间:2011-09-23 13:44:13

标签: silverlight windows-phone-7

这是一款Windows Phone 7 Silverlight应用。我有一个ItemsControl显示滚动列表。我使用Grid作为ItemTemplate中的容器。我想捕获网格上的单击事件(触摸)以导航到单击项目的详细信息视图。但是,我看到的唯一可用的事件是鼠标事件,它们也用于滚动。我更熟悉Android编程,其中框架为我区分滚动事件和点击事件。我如何在WP7上做同样的事情?我想忽略触摸事件,因为它们与滚动相关联,但捕获用户实际点击的点击事件。手动方式是处理MouseLeftButtonUp并在滚动时设置一个标志,告诉我忽略该事件,但我希望每次需要显示列表时都要自己编写。我认为这是一个非常常见的用例,有一个简单的解决方案。

下面马特的回答有效,但这里有一个完整的描述,说明我如何让它为将来谷歌的人工作。

  1. 下载并安装适用于WP7的Silverlight Toolkit:http://silverlight.codeplex.com/releases/view/60291
  2. 在项目
  3. 中添加对Microsoft.Phone.Controls.Toolkit.dll的引用
  4. 包含工具包名称空间
  5. 将GestureListener添加到应接收点击事件的项目:
  6. 要添加到需要此功能的页面和控件的命名空间:

    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
    xmlns:toolkitPrimitives="clr-namespace:Microsoft.Phone.Controls.Primitives;assembly=Microsoft.Phone.Controls.Toolkit"
    

    更新列表xaml(缩写):

            <ItemsControl ItemsSource="{Binding FeedItems}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
    
                        <!-- Container -->
                        <Grid HorizontalAlignment="Stretch">
                            <toolkit:GestureService.GestureListener>
                                <toolkit:GestureListener
                                    Tap="OnFeedItemTap" />
                            </toolkit:GestureService.GestureListener>
    

1 个答案:

答案 0 :(得分:1)

如果您使用的是最新工具/目标7.1(芒果)设备,那么您可以在网格上使用Tap事件。

如果您仍在定位7.0,那么您可以使用Click事件或使用Toolkit中的GestureListener来检测点按。