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