WPF Media Player список в качестве списка воспроизведения - PullRequest
1 голос
/ 22 ноября 2011

Я делаю медиаплеер в WPF. Я думал использовать список управления для списка воспроизведения.

Я понятия не имею, как связать щелчок по элементу списка и воспроизвести этот элемент, а также заставить моего игрока делать перемешивание или повторение для этих элементов.

Есть предложения?

1 Ответ

1 голос
/ 22 ноября 2011

Для начала вы можете установить ItemSource вашего ListBox во внутреннюю IEnumerable структуру, например SongList = List<Song>, содержащую ссылки на ваши песни.Затем присоедините обработчик событий DoubleClick к вашему ListBox.В случае двойного щелчка sender теперь должно быть вашим ListBox.Выбранный элемент (песня) должен тогда быть (sender as EventList).SelectedItems[0].Посмотрите, есть ли этот элемент в вашем SongList, и если это так, играйте в него!

Ваш код XAML может выглядеть следующим образом:

<Grid>
    <ListBox Name="songList" MouseDoubleClick="songList_MouseDoubleClick">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=songName}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

И в вашем коде инициализации:

songList.ItemSource = InternalSongList;

И обработчик событий:

private void songList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    Controls.ListBox songList = sender as Controls.ListBox;
    if (songList.SelectedItems.Count > 0)
    {
        Song selectedSong = songList.SelectedItems[0];

        // To be on the safe side
        if (InternalSongList.Contains(selectedSong))
        {
            selectedSong.Play();
        }
    }
}

Конечно, это можно улучшить с помощью безопасности, и я полагаю, что воспроизведение песни в действительности немного сложнее.Что касается случайного выбора, случайная функция, выбирающая индекс для вашего внутреннего списка, вероятно, должна это делать.Повторить должно быть одинаково просто: посчитайте проигранные песни и убедитесь, что ни одна из них не воспроизводится дважды.Когда все песни будут воспроизведены один раз, очистите список проигранных песен и повторите!Преимущество использования IEnumerable заключается в том, что вам не нужно слишком сильно прикасаться к ListBox, просто установите ItemsSource, и он справится сам с собой.

...