2017-08-20 59 views
-1
private Queue<Uri> playList = new Queue<Uri>(); 

playList.Enqueue(new Uri(@"D:\media1")); playList.Enqueue(new Uri(@"D:\media2")); playList.Enqueue(new Uri(@"D:\media3"));制作播放列表动态

在这里,我做了播放列表硬编码。但我想从字符串数组中填充playList。这怎么可能?

我的字符串数组是string[] mylist=new string[3];

mylist[0][email protected]"D:\media1; 
mylist[1][email protected]"D:\media2; 
mylist[2][email protected]"D:\media3; 

我已经这样做了:

for (int i = 0; i < mylist.Length; i++) 
     { 
      playList.Enqueue(new Uri(mylist[i])); 
      mediaelement.play(); 

     } 

但也仅仅是打最后一个媒体.....

+0

没有好的[MCVE]认为可靠地再现您的问题,这是不可能知道正确的答案,你的问题是什么。然而,假设你的_“使播放列表硬编码”_代码的版本做你想要的,我会说你在上面的代码中做错了唯一的事情就是你调用'mediaelement.play();'里面循环,实际上你应该把这个语句放在括号之外,循环之后。如果您需要更多帮助,请改善您的问题。 –

回答

0

的问题是,MediaElement实际上并没有播放列表功能,但您可以轻松地自行实施。实现MediaEndedEventmediaElement并播放字符串数组中的下一个元素。我的XAML代码:

<Window x:Class="WpfApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApp" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="320*"/> 
      <RowDefinition Height="50*"/> 
     </Grid.RowDefinitions> 
     <MediaElement x:Name="mediaelement" Grid.RowSpan="1" LoadedBehavior="Manual" MediaEnded="mediaelement_MediaEnded"/> 
     <StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center"> 
      <Button x:Name="btnPlay" Content="Next" Click="mediaelement_MediaEnded" Width="50" Height="25" Margin="5"/> 
     </StackPanel> 
    </Grid> 
</Window> 

和C#代码:

public partial class MainWindow : Window 
{ 
    private string[] mylist = new string[3]; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     mylist[0] = @"D:\media1"; 
     mylist[1] = @"D:\media1"; 
     mylist[2] = @"D:\media1"; 
     mediaelement.Source = new Uri(mylist[0]); 
     mediaelement.Play(); 
    } 

    private void mediaelement_MediaEnded(object sender, RoutedEventArgs e) 
    { 
     for (int i = 0; i < mylist.Length - 1; i++) 
     { 
      Uri current = new Uri(mylist[i]); 
      if (mediaelement.Source == current) 
      { 
       mediaelement.Source = new Uri(mylist[i + 1]); 
       break; 
      } 
     } 

     mediaelement.Play(); 
    } 
} 
+0

感谢您的回答....这就是我想要的 – user5241812

+0

如果它对您有所帮助,请考虑将我的答案标记为已接受。 – Jakob