我正在使用XAML和C#开发Windows Phone 8.1应用程序。我有一个ListView从绑定列表中获取其项目并通过DataTemplate显示它们。现在,在这个DataTemplate中有多个子元素,当用户点击列表中的项目时,我希望能够确定他实际触摸的子元素。根据这一点,应用程序应该在项目中展开包含更多详细信息的视图,或者导航到另一个页面。
ListView的ItemClick事件处理程序是ListView_ItemClick(对象发送者,ItemClickEventArgs e),我认为e.OriginalSource可能会给我答案,但这只是给了我点击的ListItem。
我还没有尝试用按钮封装孩子并拦截他们的点击事件会有效,但我很乐意尝试任何替代方案。
答案 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
属性中检索该项目。
这里有类似的问题但是对于不同的控制: