LongListSelector数据绑定与点击图像显示消息框

时间:2013-08-19 07:03:37

标签: c# windows-phone

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

结果如下面的打印屏幕:

enter image description here

代码背后:

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?");
}

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

2 个答案:

答案 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);
}