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 является базовым типом каждого элемента управления пользовательского интерфейса. Используя его, вам не нужно беспокоиться о том, является ли это изображение, текстовый блок, ...)

Другие вопросы по тегам