2017-08-20 56 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