播放MediaElement后,我该如何再次播放?

时间:2010-03-22 03:37:27

标签: wpf silverlight audio mp3 mediaelement

我的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 个答案:

答案 0 :(得分:7)

我找到了,你必须首先停止音频,然后设置位置:

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

答案 1 :(得分:2)

我发现以上内容对我不起作用,我能让它工作的唯一方法是动态创建一个mediaelement。继承我使用的代码 - 我复制了名为mePlayClick的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();
        };
    }

答案 2 :(得分:2)

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();
    }   

}
相关问题