WPF MediaElement应用的播放列表

3
我正在通过构建类似WMP的应用程序来学习C#和WPF。下面的代码可以正常运行,从列表框中选择电影会在媒体元素中播放。我的问题是找不到一种自动开始下一个电影的方法。谢谢。
提供电影列表的xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>

熊 c:\movies\Bear.wmv

蝴蝶 c:\movies\Butterfly.wmv
湖泊 c:\movies\Lake.wmv

xaml

<Window x:Class="WpfAppPlaylistTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="425">

<Window.Resources>
    <XmlDataProvider x:Key="myMoviesXML"

                         Source="c:\Movies\media1.xml"
                         XPath="media"
        />
</Window.Resources>

<Grid DataContext="{Binding ElementName=movieList, Path=SelectedItem}">
    <ListBox ItemsSource="{Binding Source={StaticResource myMoviesXML}, XPath=//media//movie}" IsSynchronizedWithCurrentItem="True" 
     Name="movieList" HorizontalAlignment="Right" Width="114" Margin="0,48,12,32">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding XPath=title}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    <MediaElement Source="{Binding XPath=filename}" LoadedBehavior="Play" Name="mediaElement1" Margin="12,26,136,12"  />
</Grid>

1个回答

1

MediaElement有一个MediaEnded事件,当发生这种情况时应该触发。然后您可以通过编程方式选择列表中的下一项,并播放该文件。


谢谢Brian,我目前正在使用MediaEnded来停止计时器,但不确定如何使用它来移动到下一个电影。我在考虑与IEnumerable或Observablecollection或xmlserializer结合使用的某种循环。我不知道哪个是最好的,或者可能有一个是死路。非常感谢您提供建议和/或示例代码。 - Ken S
嘿,如果媒体结束事件触发,你不能编程方式选择列表框中的下一个条目吗?你是否将列表框选定值映射到媒体元素?所以我认为改变选定索引会触发列表框更改事件,你可以利用它来根据选定值更改媒体...不过你是这样设置的吗? - Brian Mains
是的,所选的列表框值是媒体元素的源,并且通过单击可以正常运行。为了自动化这个“单击”,我认为我需要一种方法使用整数索引XML文件以跟踪正在播放的内容。目前我正在研究如何做到这一点。 - Ken S
嘿,如果你设置了SelectedIndex属性,它不会像点击一样触发事件吗?好的,如果它不会,那么你可以创建一个方法,将索引传递给它,并让这段代码和listbox点击调用该方法来处理索引。 - Brian Mains

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接