我正在使用c#和xaml创建一个应用程序,其中我有20个页面,每个页面都有一些角色图像,当我点击该图像时,会弹出一些对话框。所以我采用了一个MediaElement,并将其设为全局,如下所示: / p>
的App.xaml:
<MediaElement x:Key="StorySound"
Volume="1"
AutoPlay="True"/>
App.xaml.cs:
public static MediaElement StorySound
{
get { return Current.Resources["StorySound"] as MediaElement; }
}
在点击事件的每个页面上,我都写了这段代码:
App.StorySound.Source = new Uri("/Sounds/Dialogues/" + textblock.Text + ".mp3", UriKind.Relative);
App.StorySound.MediaOpened+=StorySound_MediaOpened;
void StorySound_MediaOpened(object sender, RoutedEventArgs e)
{
App.StorySound.Play();
}
当我使用我创建的没有声音播放的下一个按钮导航到第3页时播放不超过2页的声音但是当我关闭应用程序并直接打开第3页时声音播放。我甚至有通过使用MessageBox来显示媒体元素的当前状态测试了这一点我发现在前两页当前状态为“正在打开”并且声音播放但在第三页上当前状态为“已关闭”因此声音没有Play.is使用MediaElement播放声音时有任何内存问题。我无法使用SoundEffect因为我所有的声音文件都是.mp3而且如果我使用soundeffect我将不得不在.wav中转换这些声音,这将增加我的应用程序的大小,因为我有超过50个声音文件。
答案 0 :(得分:0)
如果我理解正确的话,你会在每页的全局MediaOpened
- 对象上挂钩StorySound
- 事件,但你似乎永远不会解开它。
我建议你要么:
MediaElement
,或StorySound
上的所有事件(以便每个页面都是此全局资源的唯一用户&#34;)。我相信可以在你的应用中使用mp3;你不应该把它们转换为wav。