播放列表框中的项目

Playing an item from a listbox

我正在尝试让我的 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();
    }

感谢您的帮助。

我建议创建两个列表,一个保存项目的名称,另一个保存它的目录。

您使用 openFileDialog.SafeFileName

找到文件目录

需要播放文件时,播放SafeFileName。

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

listbox creation:`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();
}

希望这段代码能正常工作,可能需要调整,因为我是用记事本写的,还没有测试过。

我认为您的 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 语句 returns 一个对象,您必须将其转换为其原始含义,即 ListBoxItem。从这里开始,您可以使用 Content 属性 访问您的价值路径。同样,这是一个您必须转换为原始含义的对象,它是一个字符串(即:您的字符串路径)。