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

Psy*_*ryo 8 c# wpf events mediaelement event-handling

我在WPF播放一个视频.我希望它循环播放所以我所做的是当媒体事件发生时,我播放我的视频.所以这会给我一个循环.问题是为什么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();
    }
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*anR 16

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

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


Iev*_*ida 8

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

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

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


Gui*_*non 6

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

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

将位置设置为零无效...

  • 这对我有用!设置为零不起作用。遵循这里的说明并为我工作。我的案例是一个 gif 动画。 (2认同)