요구 사항이 있습니다. wpf를 사용하여 창에서 여러 오디오 노래를 재생해야합니다. 누구든지이 기능을 구현하는 가장 좋은 방법을 제안 할 수 있습니까?목록에서 여러 곡을 선택하고 재생하는 방법은 무엇입니까?
창이 있습니다. 목록 상자에 노래 목록이 표시됩니다. 사용자는 목록 상자에서 여러 곡을 선택하고 재생을 클릭 할 수 있어야합니다.
사용자가 선택한 모든 오디오 노래를 하나씩 재생해야합니다.
귀하의 도움에 감사드립니다.
요구 사항이 있습니다. wpf를 사용하여 창에서 여러 오디오 노래를 재생해야합니다. 누구든지이 기능을 구현하는 가장 좋은 방법을 제안 할 수 있습니까?목록에서 여러 곡을 선택하고 재생하는 방법은 무엇입니까?
창이 있습니다. 목록 상자에 노래 목록이 표시됩니다. 사용자는 목록 상자에서 여러 곡을 선택하고 재생을 클릭 할 수 있어야합니다.
사용자가 선택한 모든 오디오 노래를 하나씩 재생해야합니다.
귀하의 도움에 감사드립니다.
가장 쉬운 방법은 ListBox 컨트롤의 ItemsSource 속성을 일부 컬렉션 (예 : "SongList")에 바인딩하는 것입니다. 사용자가 양식에 버튼을 클릭하면
<ListBox Name="lstSongs" ItemsSource="{Binding Path=SongList}" SelectionMode="Extended" Grid.Row="1" />
다음 노래
<MediaElement Name="player" MediaEnded="MediaElement_MediaEnded" LoadedBehavior="Play" UnloadedBehavior="Stop" Source="{Binding Path=CurrentlyPlaying}" />
의 페이지 듣기에 MediaElement에 컨트롤이 현재 선택한 항목을 대기열에 추가됩니다. 현재 선택된 항목은 ListBox.SelectedItems 속성을 읽어 보면 알 수 있습니다.
private void cmdQueueItems_Click(object sender, RoutedEventArgs e)
{
Queue = lstSongs.SelectedItems.OfType<Uri>().ToList();
playNext();
}
는 그런 다음 큐의 첫 번째 항목을 재생을 시작하고, MediaElement.MediaEnded
이벤트가 발생할 때 사용할 수가있는 경우, 큐의 다음 항목에 현재 재생중인 항목을 대체합니다.
private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
playNext();
}
사용자가 미리 정의 된 중지 버튼을 누를 때까지이 작업을 수행합니다.
playNext()
방법은 단순히
private void playNext()
{
CurrentlyPlaying = Queue.FirstOrDefault();
if (CurrentlyPlaying != null)
Queue.Remove(CurrentlyPlaying);
}
MainWindow.xaml.cs를
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public List<Uri> Queue { get; private set; }
#region CurrentlyPlaying Definition
private Uri _CurrentlyPlaying = null;
public Uri CurrentlyPlaying
{
get
{
return _CurrentlyPlaying;
}
set
{
_CurrentlyPlaying = value;
OnPropertyChanged("CurrentlyPlaying");
}
}
#endregion // end of CurrentlyPlaying region
public System.Collections.ObjectModel.ObservableCollection<Uri> SongList { get; private set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
SongList = new System.Collections.ObjectModel.ObservableCollection<Uri>();
SongList.Add(new Uri(@"E:\Music\_relaxation\African Drums - Tribal Music.mp3"));
SongList.Add(new Uri(@"E:\Music\Disturbed\Disturbed - A Welcme Burden.mp3"));
}
private void cmdQueueItems_Click(object sender, RoutedEventArgs e)
{
Queue = lstSongs.SelectedItems.OfType<Uri>().ToList();
playNext();
}
private void cmdSkipItem_Click(object sender, RoutedEventArgs e)
{
playNext();
}
private void MediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
playNext();
}
private void playNext()
{
CurrentlyPlaying = Queue.FirstOrDefault();
if (CurrentlyPlaying != null)
Queue.Remove(CurrentlyPlaying);
}
}
MainWindow를합니다 (CurrentlyPlaying 속성이 INotifyPropertyChanged.PropertyChanged
이벤트를 발생하는지 확인) 것 .xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<MediaElement Name="player" MediaEnded="MediaElement_MediaEnded" LoadedBehavior="Play" UnloadedBehavior="Stop" Source="{Binding Path=CurrentlyPlaying}" />
<ListBox Name="lstSongs" ItemsSource="{Binding Path=SongList}" SelectionMode="Extended" Grid.Row="1" />
<Button Content="Play selected" Click="cmdQueueItems_Click" Grid.Row="2" />
<Button Content="Skip" Click="cmdSkipItem_Click" Grid.Row="3" />
</Grid>
나에게 내가 목록 상자에서이 노래를 선택한 – Radhika
도움 그때 내가 플레이 버튼을 클릭 한 큐에 추가하세요? 내가 어떻게해야 뭐야 큐 근처 오류를 얻고있다 ...하지만 재생되지 않는 ... 어떻게해야합니까? – Radhika
바인딩을 올바르게 설정 했습니까? 우리는 유효합니까? 내 소식을 전체 소스로 업데이트했습니다. – fatty