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

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

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

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

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

我在一个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:

              

使用SelectionChanged事件。

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

类似的问题在这里,但对于不同的控制:

获取longlistselector中所选项的索引