我在ListView中运行媒体文件时遇到了一些问题。 我把文件放在一个ObservableCollection中并用ListView绑定它,但当我从ListView中点击该文件时,它并没有开始运行! 可能有什么不对?
代码......
XAML
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<ListView Name="filesListview" ItemsSource="{x:Bind FilesList}" SelectionChanged="filesListview_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FileName}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Artist}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Album}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FileName}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<MediaPlayerElement x:Name="mediaElement" AutoPlay="True" AreTransportControlsEnabled="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1"/>
</Grid>
自由班
public class MusicLib
{
public string FileName { get; set; }
public string Artist { get; set; }
public string Album { get; set; }
public string FilePath { get; set; }
}
和.cs
private ObservableCollection<MusicLib> FilesList = new ObservableCollection<MusicLib>();
public AudioPlayer()
{
this.InitializeComponent();
}
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
StorageFolder musicLib = KnownFolders.MusicLibrary;
var files = await musicLib.GetFilesAsync();
foreach (var file in files)
{
StorageItemThumbnail currentThumb = await file.GetThumbnailAsync(ThumbnailMode.MusicView, 200, ThumbnailOptions.UseCurrentScale);
var albumCover = new BitmapImage();
albumCover.SetSource(currentThumb);
var fileProperties = await file.Properties.GetMusicPropertiesAsync();
var fileName = fileProperties.Title;
var artist = fileProperties.Artist;
if (artist == "") { artist = "Unkonw"; };
var album = fileProperties.Album;
if (album == "") { album = "Unkonw"; };
FilesList.Add(new MusicLib
{
FileName = fileName,
Artist = artist,
Album = album,
FilePath = file.Path
});
}
}
private void filesListview_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListView view = (ListView)sender;
MusicLib song = (MusicLib)view.SelectedItem;
string path = song.FilePath;
mediaElement.Source = MediaSource.CreateFromUri(new Uri(path));
mediaElement.MediaPlayer.Play();
}
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
之前我遇到过同样的问题。我试着在下面尝试,而不是绞尽脑汁解决原因。
private async void filesListview_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
StorageFile file = await StorageFile.GetFileFromPathAsync(path);
mediaPlayer.Source = MediaSource.CreateFromStorageFile(file);
mediaPlayer.MediaPlayer.Play();
}
它对我有用。