播放完MediaElement后,如何再次播放它?

3
我在我的Silverlight应用程序中有一个名为TestAudio的MediaElement变量。
当我点击按钮时,它会正确地播放音频。
但是当我再次点击按钮时,它不会播放音频。
如何使MediaElement第二次播放?
以下尝试将位置重置为0都没有成功:
private void Button_Click_PlayTest(object sender, RoutedEventArgs e)
{
    //TestAudio.Position = new TimeSpan(0, 0, 0);
    //TestAudio.Position = TestAudio.Position.Add(new TimeSpan(0, 0, 0));
    //TestAudio.Position = new TimeSpan(0, 0, 0, 0, 0);
    //TestAudio.Position = TimeSpan.Zero;

    TestAudio.Play();
}
3个回答

9
我找到了,你只需要先停止音频播放,然后设置位置即可:

stop 音频播放,然后设置位置:

TestAudio.Stop();
TestAudio.Position = TimeSpan.Zero;

我不得不使用Pause()代替Stop()。愚蠢。 - Sinaesthetic

3

MediaElement没有内置的支持循环播放的功能。您可以使用MediaEnded事件,简单地将媒体位置设置为零或者调用Stop()方法。无论哪种方法都能让您回到视频/音频的开头进行播放。

 public partial class MainPage : UserControl
{
    public MainPage()
    {
        // Required to initialize variables
        InitializeComponent();
        // Used for loopback.
        MyME.MediaEnded += new RoutedEventHandler(MyME_MediaEnded);
    }

    // MediaElement has no looping capabilities so need to set the position back
    // to the begining after the video finishes in order to play again.
    // Or you can use the stop method
    void MyME_MediaEnded(object sender, RoutedEventArgs e)
    {
        //MyME.Position = TimeSpan.Zero;
        MyME.Stop();
    }

    private void BtnPlay_Click(object sender, RoutedEventArgs e)
    {

        MyME.Play();
    }

    private void BtnPause_Click(object sender, RoutedEventArgs e)
    {
        MyME.Pause();
    }

    private void BtnStop_Click(object sender, RoutedEventArgs e)
    {
        MyME.Stop();
    }   

}

2

我发现上述方法对我不起作用,唯一能让它正常工作的方式是动态创建媒体元素。以下是我使用的代码 - 我从一个名为mePlayClick的MediaElement中复制了值,这个MediaElement最初是我放在XAML中的,但你可能不需要这样做。

    private void Play_MediaSound()
    {
        // Create new media element dynamically
        MediaElement mediaElement = new MediaElement();

        // Reuse settings in XAML 
        mediaElement.Volume = mePlayClick.Volume;
        mediaElement.Source = mePlayClick.Source;
        mediaElement.AutoPlay = mePlayClick.AutoPlay;

        // WHen the media ends, remove the media element
        mediaElement.MediaEnded += (sender, args) =>
        {
            LayoutRoot.Children.Remove(mediaElement);
            mediaElement = null;
        };

        // Add the media element, must be in visual ui tree
        LayoutRoot.Children.Add(mediaElement);

        // When opened, play
        mediaElement.MediaOpened += (sender, args) =>
        {
            mediaElement.Play();
        };
    }

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