После воспроизведения MediaElement, как я могу воспроизвести его снова? - PullRequest
2 голосов
/ 22 марта 2010

У меня есть переменная MediaElement переменная с именем TestAudio в моем приложении Silverlight.

Когда я нажимаю кнопку , он воспроизводит звук правильно .

Но когда я снова нажимаю кнопку , звук не воспроизводится.

Как заставить 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 ]

7 голосов
/ 22 марта 2010

Я нашел это, вам просто нужно остановить аудио сначала, а затем установить положение:

TestAudio.Stop();
TestAudio.Position = TimeSpan.Zero;
2 голосов
/ 26 января 2011

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 голосов
/ 02 апреля 2010

Я обнаружил, что вышеупомянутое не работает для меня, и единственный способ заставить его работать - это динамическое создание медиаэлемента.Вот код, который я использовал - я скопировал значения из MediaElement с именем mePlayClick, который я изначально поместил в 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();
        };
    }
...