1

我创建了一个带有文本块和图像的 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?");
}

请教我如何解决这个问题。谢谢。

4

2 回答 2

1

您将希望停止事件的传播,因此e.Handled = true;在您希望事件停止的处理程序中这样做。

来自关于的文档Handled

“获取或设置一个将路由事件标记为已处理的值。Handled 的真值可防止沿事件路由的大多数处理程序再次处理相同的事件。”

于 2013-08-19T07:07:15.807 回答
0

sender 不是 LongListSelector 而是用户点击的图像,因此是 null 错误。

基本上,您只想检索用户点击的项目?在这种情况下,使用被点击控件的 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);
}
于 2014-09-30T09:15:23.603 回答