【问题标题】:How to play a selected song from ListView in UWP App如何在 UWP App 中播放 ListView 中的选定歌曲
【发布时间】:2020-06-03 17:19:18
【问题描述】:

我是 UWP 开发的新手,我正在尝试播放我的 ListView 中显示的歌曲。我正在编写的应用程序适用于在树莓派 pi3 上运行的 Windows IoT Core。

所以基本上现在发生的情况是,当我从ListView 中选择歌曲并点击播放按钮时,什么也没有发生?我想我需要让MediaPlayer 知道选择了哪首歌并播放那首歌?

这是我正在使用的代码:

XAML:

<MediaElement x:Name="mediaPlaylist" AreTransportControlsEnabled="True" Margin="389,-10,10,10">
        <MediaElement.TransportControls>
            <MediaTransportControls IsZoomEnabled="False" IsZoomButtonVisible='False' IsSeekBarVisible="True" IsSeekEnabled="True" IsFullWindowButtonVisible="False" IsStopButtonVisible="True"/>
        </MediaElement.TransportControls>
</MediaElement>

<ListView
         x:Name="SelectSong" 
        Margin="389,28,10,113"
        FontStyle="Oblique"
        FontWeight="Bold"
        Background="DarkGreen"
        ItemClick="SongClicked"
        IsItemClickEnabled="True"
         />

C#:

public MainPage()
    {
        this.InitializeComponent();
        _ = InitFolderAsync();

    }

private async Task InitFolderAsync()
    {
        var files = await Windows.Storage.KnownFolders.MusicLibrary.GetFilesAsync();
        foreach (StorageFile item in files)
        {
            SelectSong.Items.Add(item.Name.ToString());
        }
    }

private async void SongClicked(object sender, ItemClickEventArgs e)
    {
        var file = e.ClickedItem as StorageFile;
        if (file != null)
        {
            var stream = await file.OpenReadAsync();
            mediaPlaylist.SetSource(stream, file.ContentType);
            mediaPlaylist.Play();
        }
    }

我想要这样一个人可以选择一首歌曲并播放它或循环播放所有歌曲。

谢谢

【问题讨论】:

  • 为什么没有为你的列表视图实现模型和视图模型?处理项目和事件会容易得多。

标签: c# uwp


【解决方案1】:

如何在 UWP App 中播放 ListView 中选定的歌曲

请检查SelectSong.Items.Add(item.Name.ToString()); 这一行,您只是将文件名添加到列表视图项,而不是文件,因此您无法使用var file = e.ClickedItem as StorageFile 获取文件。

我们需要编辑SongClicked 并获取带有陈词滥调的音乐文件,如下所示。

private async void SongClicked(object sender, ItemClickEventArgs e)
{
    var file = await  KnownFolders.MusicLibrary.GetFileAsync(e.ClickedItem.ToString());

    if (file != null)
    {
        var stream = await file.OpenReadAsync();
        mediaPlaylist.SetSource(stream, file.ContentType);
        mediaPlaylist.Play();
    }
}

【讨论】:

  • 你说的很有道理!谢谢它现在工作得很好!我现在希望让它自动播放下一首歌曲。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多