如何确定单击ListView项的哪个子元素?

时间:2015-03-04 09:42:33

标签: c# xaml listview windows-phone-8.1 listviewitem

我正在使用XAML和C#开发Windows Phone 8.1应用程序。我有一个ListView从绑定列表中获取其项目并通过DataTemplate显示它们。现在,在这个DataTemplate中有多个子元素,当用户点击列表中的项目时,我希望能够确定他实际触摸的子元素。根据这一点,应用程序应该在项目中展开包含更多详细信息的视图,或者导航到另一个页面。

ListView的ItemClick事件处理程序是ListView_ItemClick(对象发送者,ItemClickEventArgs e),我认为e.OriginalSource可能会给我答案,但这只是给了我点击的ListItem。

我还没有尝试用按钮封装孩子并拦截他们的点击事件会有效,但我很乐意尝试任何替代方案。

3 个答案:

答案 0 :(得分:2)

我自己就找到了解决方案。我将ListView设置为SelectionMode =“None”和IsItemClickEnabled =“False”,然后我为各个子元素添加了Tapped处理程序。按照我的意愿工作。

答案 1 :(得分:2)

我在一个ListViewItem中有一个TextBlock和一个Image,并且刚刚使用了Image_PointerPressed事件。这样做也会触发ListView的ItemClick事件,所以我首先禁用它,执行我想要的东西,然后重新启用ItemClick事件,以便在按下TextBlock时仍然触发。

代码背后:

private async void imgDone_PointerPressed(object sender, PointerRoutedEventArgs e)
    {

        // disable click event so it won't fire as well
        lvwCouncils.IsItemClickEnabled = false;

        // do stuff
        MessageDialog m = new MessageDialog("User Details");
        await m.ShowAsync();

        // Re-enable the click event
        lvwCouncils.IsItemClickEnabled = true;
    }

的Xaml:

 <ListView x:Name="lvwCouncils" ItemClick="lvwCouncils_ItemClicked"  IsItemClickEnabled="true" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock
                    Grid.Column="1"
                    Text="{Binding council_name}"
                    FontSize="24"
                    Margin="10,10,30,10"
                                    />
                        <Border Height="20" Width="20" Margin="10,10,0,10" >
                            <Image x:Name="imgDone" 
                                   Source="Assets/user_earth.png" Stretch="UniformToFill" PointerPressed="imgDone_PointerPressed"/>
                        </Border>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

答案 2 :(得分:0)

使用SelectionChanged事件。

sender对象转换为ListView类型,然后从SelectedItem属性中检索该项目。

这里有类似的问题但是对于不同的控制:

Get the index of the selected item in longlistselector