【问题标题】:Get RightTapped GridViewItem获取 RightTapped GridViewItem
【发布时间】:2015-10-04 18:00:14
【问题描述】:

我有一个GridView,用于存储用户添加到收藏中的歌曲:

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

【问题讨论】:

  • 为什么没有启用选择?
  • 因为我不想让他们选择歌曲;我只是在它被点击时播放它。如果一切都失败了,我将启用选择,但绝对不希望这样做。

标签: c# xaml windows-10 uwp


【解决方案1】:

如果我正确理解您的问题,您希望获取绑定对象而不是 GridView。 如果是这种情况,你可以试试这个。

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

【讨论】:

  • 如果您需要正确点击的项目的索引而不是 DataContent,请确保源中的每个项目都是唯一的实例,然后(假设您绑定到 List ), 使用Songs.FindIndex(x=&gt; ReferenceEquals(x, song));
猜你喜欢
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多