Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Phone MediaElement_C#_Xaml_Windows Phone_Mediaelement - Fatal编程技术网

C# Windows Phone MediaElement

C# Windows Phone MediaElement,c#,xaml,windows-phone,mediaelement,C#,Xaml,Windows Phone,Mediaelement,我正在使用c#和xaml创建一个应用程序,其中我有20个页面,每个页面都有一些字符图像,当我点击该图像时,应该会弹出一些对话。因此,我采用了MediaElement并使其全局化,如下所示: App.xaml: <MediaElement x:Key="StorySound" Volume="1" AutoPlay="True"/> 在tap事件的每一页上,我都写了以下代码: App.StorySound.So

我正在使用c#和xaml创建一个应用程序,其中我有20个页面,每个页面都有一些字符图像,当我点击该图像时,应该会弹出一些对话。因此,我采用了MediaElement并使其全局化,如下所示:

App.xaml:

<MediaElement x:Key="StorySound" 
                  Volume="1"
                  AutoPlay="True"/>
在tap事件的每一页上,我都写了以下代码:

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

当我使用“下一步”按钮导航到第三页时,声音播放不超过2页。我没有创建声音播放按钮,但当我关闭应用程序并直接打开第三页时,声音播放。我甚至使用MessageBox来显示mediaelement的当前状态,我发现在前两页当前状态为“打开”,声音播放,但在第三页上,当前状态为“关闭”因此声音无法播放。使用MediaElement播放声音时是否存在内存问题。我无法使用SoundEffect,因为我的所有声音文件都是.mp3。如果我使用SoundEffect,我将不得不将这些声音转换为.wav,这将增加我的应用程序的大小,因为我有50多个声音文件。

如果我正确理解你的意思,你就是挂起每页上全局
StorySound
-对象上的
MediaOpen
-事件,但您似乎从未将其解开。 我建议您:

  • 在开始(或停止)的每个页面上使用本地
    MediaElement
    ,或
  • 当您导航时,请确保在
    StorySound
    上取消所有事件的锁定(以便每个页面都是此全局资源的唯一“用户”)
我相信在你的应用程序中安装may mp3会很好;您不需要将它们转换为wav

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