c#WPF如何在不声明新源的情况下从mediaended事件处理程序重复播放MediaElement?

我在WPF中播放video。我希望它循环播放所以我所做的是当媒体播放事件触发时,我播放我的video。 所以这会给我一个循环。 问题是为什么ui必须再次创造新的来源? 为什么我不能称之为’玩’?

出于某种原因,我不想在XAML中这样做。

看看我的代码片段:

string startPath System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); public Window1() { InitializeComponent(); media.Source = new Uri(startPath + @"playlist.wpl"); media.play(); } private void Media_Ended(object sender, EventArgs e) { media.Source = new Uri(startPath + @"playlist.wpl"); //if i dont put this line, video wont play..seems like it cant get the source media.Play(); } 

或者是否有一种正确的方法来循环NOT在XAML中,但在这里.cs文件?

不要在Media_Ended处理程序的开头重置Source,而是尝试将Position值设置回起始位置。 Position属性是TimeSpan,所以你可能想要像……

 private void Media_Ended(object sender, EventArgs e) { media.Position = TimeSpan.Zero; media.Play(); } 

您甚至不需要将LoadedBehavior设置为手动,只需将其保留为Play

在MediaEnded活动中,您应该设置不等于零的video新位置:

 private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) { media.Position = TimeSpan.FromMilliseconds(1); } 

我让它工作设置UnloadedBehavior =“手动”和以下代码

  private void gifAnimation_MediaEnded(object sender, RoutedEventArgs e) { gifAnimation.Position = new TimeSpan(0,0,1); gifAnimation.Play(); } 

将位置设置为零不起作用……

我认为你应该使用这段代码:

 private void Media_Ended(object sender, EventArgs e) { media.Position = TimeSpan.Zero; media.LoadedBehavior = MediaState.Play; } 

我希望这将有所帮助。

您不必再次设置源。只需将mediaelement的位置设置为media_ended事件的开头

  private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) { ((MediaElement)(sender)).Stop(); ((MediaElement)(sender)).Position = new TimeSpan(0, 0, 0); ((MediaElement)(sender)).Play(); } 

您可能需要将MediaElement.LoadedBehavior设置为Manual

编辑

我已经尝试使用REPEAT标记加载asf文件,并且其工作正常

  Simple ASX Demo   Vista Butterfly Video Microsoft Corporation (c)2007 Microsoft Corporation     

但我认为媒体元素的内置播放列表处理机制存在一些缺陷。我建议遵循以下链接中提到的解决方法

http://blog.revolunet.com/index.php/general/wpf-mediaelement-asx-workaround

如果您有任何问题,请在此发表评论