Windows phone 如何在WP上列出MediaLibrary中的AlbumArt?

Windows phone 如何在WP上列出MediaLibrary中的AlbumArt?,windows-phone,audio-player,Windows Phone,Audio Player,我一直在寻找如何从Windows Phone Media Library中列出专辑封面的方法,但我没有找到任何答案 我正在为wp8开发一个音乐播放器,实际上我可以成功地将专辑信息列为专辑名、艺术家名、持续时间等,但我无法获得专辑艺术 以下是我实际使用的代码: <phone:PhoneApplicationPage.Resources> <DataTemplate x:Key="AlbumInfoTemplate"> <

我一直在寻找如何从Windows Phone Media Library中列出专辑封面的方法,但我没有找到任何答案

我正在为wp8开发一个音乐播放器,实际上我可以成功地将专辑信息列为专辑名、艺术家名、持续时间等,但我无法获得专辑艺术

以下是我实际使用的代码:

    <phone:PhoneApplicationPage.Resources>
         <DataTemplate x:Key="AlbumInfoTemplate">
            <StackPanel VerticalAlignment="Top" Orientation="Horizontal">
                <StackPanel Orientation="Vertical">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="90"/>
                            <ColumnDefinition Width="auto"/>
                        </Grid.ColumnDefinitions>
                        <Image Source=" " Margin="5" Height="80" Width="80" Stretch="UniformToFill"/>
                        <StackPanel Grid.Column="1">
                            <TextBlock FontWeight="Normal" Text="{Binding Name}" Margin="10,0,0,0" FontSize="25" Foreground="Black"/>
                            <TextBlock FontWeight="Normal" Text="{Binding Artist}" Margin="10,0,0,0" FontSize="20" Foreground="Black" Opacity="0.75"/>
                        </StackPanel>
                    </Grid>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>

    <phone:LongListSelector
                        x:Name="llsAlbums"
                        SelectionChanged="llsAlbums_SelectionChanged"
                        Margin="0,-35,0,0"
                        JumpListStyle="{StaticResource JumpListStyle}"
                        Background="Transparent"
                        GroupHeaderTemplate="{StaticResource GroupHeaderTemplate}"
                        ItemTemplate="{StaticResource AlbumInfoTemplate}"
                        LayoutMode="List"
                        IsGroupingEnabled="true"
                        HideEmptyGroups ="true"/>

希望你们能帮助我,伙计们

在进行任何操作之前,您需要对XAML中的LongListSelector定义进行一个小的修改。将此ItemsSource={Binding}添加到其中。那么应该是这样的

<phone:LongListSelector
                        x:Name="llsAlbums"
                        SelectionChanged="llsAlbums_SelectionChanged"
                        Margin="0,-35,0,0"
                        JumpListStyle="{StaticResource JumpListStyle}"
                        Background="Transparent"
                        GroupHeaderTemplate="{StaticResource GroupHeaderTemplate}"
                        ItemTemplate="{StaticResource AlbumInfoTemplate}"
                        LayoutMode="List"
                        IsGroupingEnabled="true"
                        HideEmptyGroups ="true"
                        ItemsSource="{Binding}"/>
然后创建这个类以及GroupHeader和JumpList要使用的方法

public class AlphaKeyGroup<T> : List<T>
{
    public delegate string GetKeyDelegate(T item);
    public string Key { get; private set; }

    public AlphaKeyGroup(string key)
    {
         Key = key;
    }

    private static List<AlphaKeyGroup<T>> CreateGroups(SortedLocaleGrouping slg)
    {
         List<AlphaKeyGroup<T>> list = new List<AlphaKeyGroup<T>>();

         foreach (string key in slg.GroupDisplayNames)
         {
             list.Add(new AlphaKeyGroup<T>(key));
         }

         return list;
    }

    public static List<AlphaKeyGroup<T>> CreateGroups(IEnumerable<T> items, CultureInfo ci, GetKeyDelegate getKey, bool sort)
    {
         SortedLocaleGrouping slg = new SortedLocaleGrouping(ci);
         List<AlphaKeyGroup<T>> list = CreateGroups(slg);

         foreach (T item in items)
         {
              int index = 0;
              index = slg.GetGroupIndex(getKey(item));
              if (index >= 0 && index < list.Count)
              {
                   list[index].Add(item);
              }
         }

         if (sort)
         {
              foreach (AlphaKeyGroup<T> group in list)
              {
                   group.Sort((c0, c1) => { return ci.CompareInfo.Compare(getKey(c0), getKey(c1)); });
              }
         }

         return list;
     }
}
然后这个实际的方法从MediaLibrary中获取专辑列表,并制作一个我们可以在LLS中使用的音乐专辑列表

public List<MusicAlbum> GetAlbums()
{
     if (lib == null)
         lib = new MediaLibrary();

     List<MusicAlbum> albumList = new List<MusicAlbum>();
     var albums = lib.Albums;

     foreach (var album in albums)
     {
         albumList.Add(new MusicAlbum()
         {
             Name = album.Name,
             Artist = album.Artist.Name,
             Art = album.HasArt ? GetAlbumArt(album) : null
         });
     }

     return albumList;
}
完成后,运行应用程序,您将看到列出的相册

private BitmapImage GetAlbumArt(Album album)
{
     BitmapImage img = new BitmapImage();
     img.DecodePixelHeight = 80;
     img.DecodePixelWidth = 80;
     img.SetSource(album.GetAlbumArt());
     return img;
}
public List<MusicAlbum> GetAlbums()
{
     if (lib == null)
         lib = new MediaLibrary();

     List<MusicAlbum> albumList = new List<MusicAlbum>();
     var albums = lib.Albums;

     foreach (var album in albums)
     {
         albumList.Add(new MusicAlbum()
         {
             Name = album.Name,
             Artist = album.Artist.Name,
             Art = album.HasArt ? GetAlbumArt(album) : null
         });
     }

     return albumList;
}
List<AlphaKeyGroup<MusicAlbum>> albumList = AlphaKeyGroup<MusicAlbum>.CreateGroups(this.GetAlbums() as List<MusicAlbum>, Thread.CurrentThread.CurrentUICulture, (MusicAlbum s) => { return s.Name; }, true);
llsAlbums.ItemsSource = albumList;