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

C# 如何确定单击了ListView项的哪个子元素?,c#,xaml,listview,windows-phone-8.1,listviewitem,C#,Xaml,Listview,Windows Phone 8.1,Listviewitem,我正在用XAML和C#开发一个windows phone 8.1应用程序。我有一个ListView,它从绑定列表中获取项目,并通过DataTemplate显示它们。现在,在这个DataTemplate中有多个子元素,当用户点击列表中的一个项目时,我希望能够确定他实际接触了哪个子元素。根据这一点,应用程序应该展开一个包含更多项目详细信息的视图,或者导航到另一个页面 ListView的ItemClick事件处理程序是ListView\u ItemClick(object sender,ItemCli

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

ListView的ItemClick事件处理程序是ListView\u ItemClick(object sender,ItemClickEventArgs e),我认为e.OriginalSource可能会给我答案,但这只是给了我单击的ListItem


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

使用
SelectionChanged
事件

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

此处有类似问题,但针对不同的控制:


使用
SelectionChanged
事件

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

此处有类似问题,但针对不同的控制:


我自己刚刚找到了解决方案。我将ListView设置为SelectionMode=“None”和IsItemClickEnabled=“False”,然后为各个子元素添加了抽头处理程序。正如我所想。

我自己刚刚找到了解决方案。我将ListView设置为SelectionMode=“None”和IsItemClickEnabled=“False”,然后为各个子元素添加了抽头处理程序。正如我所希望的那样工作。

我在一个ListViewItem中有一个文本块和一个图像,并且刚刚使用了Image\u 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:


我在一个ListViewItem中有一个文本块和一个图像,并且刚刚使用了Image\u 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项(如果我理解正确,或者我是否遗漏了什么?),我已经在使用它了。我想确定该项中的哪个子元素被单击。这样,我只会得到被单击的ListView项(如果我理解正确,或者我是否遗漏了什么?),我已经有了工作。我想确定单击了该项中的哪个子元素。实现这一点的最佳方法是MVVM属性和命令绑定。您正在使用哪个windows phone 8.1进行WinRT或Silverlight开发?@muhammadisaifullah我正在使用WinRT。如何进行命令绑定?我正在为我的windows phone 8.1 WinRT应用程序使用MVVM Light@Muhammadisaifullah那篇文章对我的问题没有任何帮助,也从来没有谈到命令绑定。实现这一点的最好方法是MVVM属性和命令绑定。您正在使用哪个windows phone 8.1进行WinRT或Silverlight开发?@muhammadisaifullah我正在使用WinRT。如何进行命令绑定?我正在为我的windows phone 8.1 WinRT应用程序使用MVVM Light@MuhammadSaifullah那篇文章对我的问题没有任何帮助,也从来没有谈到命令绑定。