2013-08-19 32 views
1

我創建了一個帶有文本塊和圖像的LongListSelector,然後單擊標題以顯示選定的員工姓名,然後單擊圖像以顯示另一個消息框。如果我點擊名稱,消息框顯示成功。當我點擊圖像時,圖像的消息框顯示成功,但人員名稱的消息框也顯示。我如何解決這個問題?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?"); 
} 

請教我如何解決他的問題。謝謝。

回答

1

你會想停止事件的傳播,所以在你想讓事件停在的處理程序中做e.Handled = true;

從文檔約Handled

「獲取或設置標記路由事件的處理 對處理的真正價值防止大多數處理器一起 再次處理相同事件的事件路由的值。」

+0

對不起,我的理解不好。你是什​​麼意思? –

0

發件人不是LongListSelector,而是用戶點擊的圖像,因此爲空錯誤。

基本上,你只是想檢索用戶點擊的項目?在這種情況下,使用輕敲控件的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); 
}