我的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();
}
答案 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();
}
}