WP8 Нажмите на изображение, чтобы получить выбранный элемент в длинном списке выбора
Я создал 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="GetName" Tap="GetName_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)
{
MessageBox.Show("Hi");
}
private void GetName_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
LongListSelector selector = sender as LongListSelector;
StaffData data = selector.SelectedItem as StaffData;
MessageBox.Show(data.Name);
}
Когда я нажимаю на текстовый блок, сообщение "Привет" отображается успешно. Но если я нажму на изображение, я получу нулевое значение. Как мне это решить? Спасибо
1 ответ
sender
это не 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);
}
(FrameworkElement является базовым типом каждого элемента управления пользовательского интерфейса. Используя его, вам не нужно беспокоиться о том, является ли это изображение, текстовый блок, ...)