2013-08-19 1 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?"); 
} 

Пожалуйста, научи меня как решить t его проблема. Благодарю.

ответ

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