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

3 回答 3

9

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

TestAudio.Stop();
TestAudio.Position = TimeSpan.Zero;
于 2010-03-22T03:41:56.433 回答
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();
    }   

}
于 2011-01-25T22:20:42.930 回答
2

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

    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();
        };
    }
于 2010-04-02T07:11:46.937 回答