获取 RightTapped GridViewItem

Get RightTapped GridViewItem

我有一个 GridView 存储用户添加到 collection 的歌曲:

<GridView x:Name="MusicGridView" Margin="10" IsItemClickEnabled="True" ItemClick="Play_Song" Grid.Row="0" ItemsSource="{Binding Songs, ElementName=thisPage, Mode=OneWay}" SelectionMode="None">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid Height="100" Width="100" RightTapped="Song_RightTapped">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Rectangle Grid.Row="0" Grid.RowSpan="2" Fill="#FF1F4E79"/>
                <Image Source="{Binding Path=AlbumArt.Source}" Grid.Row="0" Height="40" Width="40" Margin="10,10,10,0"/>
                <TextBlock Text="{Binding Title}" Foreground="White" VerticalAlignment="Bottom" HorizontalAlignment="Center" Grid.Row="1" Margin="5" TextWrapping="Wrap"/>
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

Grid 为 right-tapped 时(我似乎无法为实际项目设置 RightTapped 属性)我显示 PopupMenu .但是,发件人当然是 Grid 本身,如果不采取看起来非常奇怪的解决方法,我找不到获得实际 GridViewItem 的方法。获取 GridView 的选定项不是一个选项,因为它没有启用选择。有没有一种简单的方法可以将项目作为 GridViewItem?

如果我正确理解你的问题,你想要获取绑定对象而不是 GridView。 如果是这样的话,你可以试试这个。

private void Song_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
    Song song = (sender as Grid).DataContext as Song;
    // Show PopupMenu
    // ...
}