2012-05-07 4 views
0

Я делаю небольшой медиа-плеер, где я добавляю медиафайлы в список, который работает как плейлист для медиаэлемента. Когда я нажимаю на элемент в списке, он начинает играть. То, что я хотел бы сделать, - заставить медиаэлемент автоматически начать воспроизведение следующей песни/видео в списке после окончания текущего.Автоматически воспроизводить следующий элемент в списке

Вот как добавить песни в ListBox:

 OpenFileDialog ofd = new OpenFileDialog(); 
     ofd.Multiselect = true; 

     if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      foreach (string file in ofd.FileNames) 
      { 
       FileInfo fileName = new FileInfo(file);     
       listBox.Items.Add(fileName); 
      } 
     } 

и вот как я могу нажать на элемент в ListBox, и он начинает играть

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     System.Windows.Controls.Button prevButton = player.Tag as System.Windows.Controls.Button; 
     System.Windows.Controls.Button button = sender as System.Windows.Controls.Button; 
     FileInfo fileInfo = button.DataContext as FileInfo; 

     // If a file is playing, stop it 

     if (prevButton != null) 
     { 
      player.Tag = null; 
      player.Stop(); 
      prevButton.Background = Brushes.White; 

      // if the one thats playing is the one that was clicked -> don't play it 

      if (prevButton == button) 
       return; 
     } 

     // Play the one that was clicked 

     player.Tag = button; 
     player.Source = new Uri(fileInfo.FullName); 
     player.Play(); 
    } 
+0

В каком классе находится «игрок»? – zimdanen

+0

Это то же самое, что и mediaelement – spex

ответ

0

Подписаться на событие MediaEnded из MediaElement или MediaPlayer, а затем выберите следующий элемент из списка.

EDIT

Как выбрать следующий пункт:

  1. Индекс текущего элемента находится в SelectedIndex собственности ListBox
  2. Вы можете получить следующий элемент путем добавления 1 к SelectedIndex и проверка того, находится ли индекс по-прежнему в пределах
  3. Сохраните новый индекс в переменной, которая сохранит новый индекс до тех пор, пока элемент не будет воспроизведен или не изменит SelectedIndex напрямую ; это изменит SelectedItem и переместит выделение в ListBox

Этот код не был проверен компилятором!

private int currentSongIndex = -1; 

void Player_MediaEnded(object sender, EventArgs e) 
{ 
    if(currentSongIndex == -1) 
    { 
     currentSongIndex = listBox.SelectedIndex; 
    } 
    currentSongIndex++; 
    if(currentSongIndex < listBox.Items.Count) 
    { 
     player.Play(listBox.Items[currentSongIndex]); 
    } 
    else 
    { 
     // last song in listbox has been played 
    } 
} 
+0

Не могли бы вы показать пример того, как это сделать? – spex

+0

В чем проблема? Выбор следующего пункта или подписка на мероприятие? –

+0

Как выбрать следующий пункт – spex

Смежные вопросы