我创建了一个带有文本块和图像的LongListSelector,然后单击标题以显示所选的人员名称,然后单击图像以显示另一个消息框。如果单击名称,则会显示消息框成功。当我点击图像时,图像的消息框显示成功,但同时显示了员工姓名的消息框。如何解决这个问题?
我使用下面的代码:
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="TileDataTemplate">
<Grid Background="{StaticResource TransparentBrush}"
Margin="0, 0, 0, 12" Height="60">
<TextBlock Text="{Binding Name}" Margin="60, 10, 0, 0" FontSize="24" Height="60">
</TextBlock>
<Image x:Name="delete" Tap="delete_Tap" Grid.Column="0" Source="/Assets/AppBar/Delete.png" Height="40" Width="40"
Margin="0, 6, 0, 5" HorizontalAlignment="Right" VerticalAlignment="Top" />
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<phone:LongListSelector
SelectionChanged="MainLongListSelector_SelectionChanged"
Margin="10,6,0,0"
ItemsSource="{Binding Staff.Items}"
LayoutMode="Grid"
GridCellSize="400,80"
ItemTemplate="{StaticResource TileDataTemplate}"
/>
</Grid>
结果如下面的打印屏幕:
代码背后:
private void MainLongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
LongListSelector selector = sender as LongListSelector;
StaffData data = selector.SelectedItem as StaffData;
MessageBox.Show(data.Name);
}
private void delete_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
MessageBox.Show("delete?");
}
请教我如何解决这个问题。感谢。
答案 0 :(得分:1)
您希望停止传播该事件,因此请在您希望事件停止的处理程序中e.Handled = true;
。
来自Handled
的文档:
“获取或设置一个值,该值将路由事件标记为已处理。 Handled的真正值可以防止大多数处理程序 再次处理同一事件的事件路线。“
答案 1 :(得分:0)
发件人不是LongListSelector,而是用户点击的图片,因此出现空错误。
基本上,您只想检索用户点击过的项目?在这种情况下,使用tapped控件的DataContext属性来检索它:
private void GetName_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var element = (FrameworkElement)sender;
StaffData data = (StaffData)element.DataContext;
MessageBox.Show(data.Name);
}