[英]LongListSelector data binding with tap image to show message box
我創建了一個帶有文本塊和圖像的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?");
}
請教我如何解決此問題。 謝謝。
您將要停止事件的傳播,所以e.Handled = true;
在您要讓事件停止的處理程序中。
從有關Handled
的文檔中:
“獲取或設置一個值,該值將路由事件標記為已處理。Handled的真實值可防止沿事件路由的大多數處理程序再次處理同一事件。”
發件人不是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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.