我试图让我的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();
}
感谢您的帮助。
答案 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
当您需要播放文件时,请播放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();
}
我无法正确获得此帖子的格式。出于某种原因,代码正在起作用。如果有人可以帮我解决这个问题,谢谢。希望这段代码有效并且可能需要调整,因为我在记事本中写了这个并且没有对它进行过测试。哈哈!强>