簡體   English   中英

選擇列表視圖項時播放音樂

[英]play music when listview item is selected

我正在開發音樂應用。 我曾使用listview向其中添加音樂文件,但是當我單擊listview項播放音樂時,拋出了The URI is empty異常。 關於此的任何幫助。

這是我的代碼

.XAML

<MediaElement x:Name="mediaElement" AreTransportControlsEnabled="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <MediaElement.TransportControls>
            <MediaTransportControls IsZoomEnabled="False" IsZoomButtonVisible='False' IsSeekBarVisible="True" IsSeekEnabled="True" IsFullWindowButtonVisible="False" IsStopButtonVisible="True"/>
        </MediaElement.TransportControls>
    </MediaElement>
    <ListView x:Name="listView" Margin="0,0,0,115" ItemClick="itemclicked" IsItemClickEnabled="True">
    </ListView>

.cs

 public MainPage()
    {
        this.InitializeComponent();

        files();
    }
    private async void files()
    {
        var query = KnownFolders.MusicLibrary.CreateFileQuery();
        var allFiles = await query.GetFilesAsync();
        foreach (var f in allFiles)
        {
            listView.Items.Add(f.DisplayName.ToString());

        }
    private void itemclicked(object sender, ItemClickEventArgs e)
    {

        mediaElement.Source = new Uri(listView.SelectedValuePath);
    }

這是因為您做錯了所有事情。

您的列表僅包含作為文件的DisplayName的字符串。

最簡單的示例可能是:

private async void files()
{
    var query = KnownFolders.MusicLibrary.CreateFileQuery();
    var allFiles = await query.GetFilesAsync();

    foreach (var f in allFiles)
    {
        listView.Items.Add(f);
    }
}

因此您將擁有文件,而不是將名稱加載到列表中

然后您需要獲取點擊的文件並將其設置為源:

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

要使列表控件顯示文件名,您可以添加項目模板,如下所示:

<Page.Resources>
    <DataTemplate x:Key="NewItemTemplate">
        <TextBlock Text="{Binding DisplayName}"></TextBlock>
    </DataTemplate>
</Page.Resources>

<ListView x:Name="listView" Margin="0,0,0,115" ItemClick="itemclicked" IsItemClickEnabled="True" ItemTemplate="{StaticResource NewItemTemplate}">
    </ListView>

它將起作用,但是當然我會考慮創建一些自定義項目,這些項目將保留對文件的引用,並將其保留在與列表的ItemsSource綁定的ObservableList中,依此類推,而不是將原始文件放入列表中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM