我在WPF制作媒体播放器。我正在考虑使用列表框控件来播放列表。
我不知道如何绑定点击列表框项目并播放该项目,还让我的播放器对这些项目进行随机播放或重复播放。
有什么建议吗?
答案 0 :(得分:1)
首先,您可以将ItemSource
的{{1}}设置为内部ListBox
结构,例如包含对您歌曲的引用的IEnumerable
。然后将SongList = List<Song>
事件处理程序附加到DoubleClick
。在双击事件中,ListBox
现在应该是您的sender
。然后,所选项目(歌曲)应为ListBox
。看看这个项目是否在(sender as EventList).SelectedItems[0]
中,如果是,请播放它!
您的XAML代码可能如下所示:
SongList
在您的初始化代码中:
<Grid>
<ListBox Name="songList" MouseDoubleClick="songList_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=songName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
事件处理程序:
songList.ItemSource = InternalSongList;
这当然可以通过安全性得到改善,我想这首歌的播放在现实中有点复杂。至于shuffle,选择内部列表索引的随机函数应该可以这样做。重复应该同样简单:计算播放的歌曲并确保没有播放两次歌曲。当所有歌曲播放一次后,清除播放的歌曲列表并重复播放!使用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
并且它处理得非常好。