播放列表框中的项目
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 属性 访问您的价值路径。同样,这是一个您必须转换为原始含义的对象,它是一个字符串(即:您的字符串路径)。
我正在尝试让我的 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 属性 访问您的价值路径。同样,这是一个您必须转换为原始含义的对象,它是一个字符串(即:您的字符串路径)。