从列表框中播放项目

时间:2016-01-10 00:36:38

标签: c# wpf listbox media playlist

我试图让我的MediaPlayer播放我在列表框中点击的项目。

但它没有用,我也不明白为什么。

这里是我的列表框的创建:(我在执行打开时添加项目)

    private void OpenExecuted(object sender, ExecutedRoutedEventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "Audio files (*.mp3;*.mpg;*.mpeg)|*.mp3;*.mpg;*.mpeg|Media files (*.avi;*.mp4;*.wmv)|*.avi;*.mp4;*.wmv|Image files (*.png;*.jpeg)|*.png;*.jpeg|All files (*.*)|*.*";
        if (openFileDialog.ShowDialog() == true)
            MediaPlayer.Source = new Uri(openFileDialog.FileName);
        MediaPlayer.Play();
        ListBoxItem item = new ListBoxItem();
        var name = openFileDialog.FileName;
        item.Content = name;
        playlist.Items.Add(item);
    }

然后,当您双击列表框中的项目时,此功能就在这里:

    private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        MediaPlayer.Stop();
        MediaPlayer.Source = new Uri(playlist.SelectedItem.ToString());
        MediaPlayer.Play();
    }

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为您的playlist.SelectedItem.ToString()声明并未提供格式良好的路径。试试这个:

private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    MediaPlayer.Stop();
    string mediaPath = ((ListBoxItem)playlist.SelectedValue).Content.ToString();
    MediaPlayer.Source = new Uri(mediaPath);
    MediaPlayer.Play();
}

为了解释一下,您的playlist.SelectedValue语句返回一个对象,您必须将其转换为其原始含义,即ListBoxItem。从这开始,您可以使用Content属性访问您的值路径。同样,这是一个你必须强制转换为其原始含义的对象,它是一个字符串(即:你的字符串路径)。

答案 1 :(得分:0)

我建议创建两个List' s,其中包含该项目的名称,而另一个包含该目录。

您可以使用openFileDialog.SafeFileName

找到files目录

当您需要播放文件时,请播放SafeFileName。

您的代码看起来有点像这样:

列表框创建:List safePlayList = new List(); private void OpenExecuted(object sender, ExecutedRoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Audio files (*.mp3;*.mpg;*.mpeg)|*.mp3;*.mpg;*.mpeg|Media files (*.avi;*.mp4;*.wmv)|*.avi;*.mp4;*.wmv|Image files (*.png;*.jpeg)|*.png;*.jpeg|All files (*.*)|*.*"; if (openFileDialog.ShowDialog() == true) MediaPlayer.Source = new Uri(openFileDialog.SafeFileName); MediaPlayer.Play(); ListBoxItem item = new ListBoxItem(); var name = openFileDialog.FileName; var safeName = openFileDialog.SafeFileName; item.Content = name; playlist.Items.Add(item);     safePlayList.add(safeName);     }

您的列表框双击将如下所示:

private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    MediaPlayer.Stop();
    MediaPlayer.Source = new Uri(safePlayList[playlist.SelectedIndex]);
    MediaPlayer.Play();
}

我无法正确获得此帖子的格式。出于某种原因,代码正在起作用。如果有人可以帮我解决这个问题,谢谢。希望这段代码有效并且可能需要调整,因为我在记事本中写了这个并且没有对它进行过测试。哈哈!