当在某页面中使用MediaElement时,默认情况下如果导航到另一页面,音乐将停止,下面给出解决方案。
1、在App.xaml.cs文件中定位到OnLaunched函数,将如下代码替换原来的
protected override void OnLaunched(LaunchActivatedEventArgs e) { #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif var rootFrame = new Frame(); rootFrame.Style = Resources["RootFrameStyle"] as Style; rootFrame.Navigate(typeof(MainPage)); Window.Current.Content = rootFrame; Window.Current.Activate(); }
<Style x:Key="RootFrameStyle" TargetType="Frame"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Frame"> <Grid> <MediaElement AudioCategory="BackgroundCapableMedia" AutoPlay="True"/> <ContentPresenter /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
3、别忘了在App.xaml文件中使用这个样式文件:
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="StylesDictionary.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
private void OnLoaded(object sender, RoutedEventArgs e) { DependencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0); musicPlayer = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0); }
别忘了在构造函数中加上这一句:this.Loaded += OnLoaded;
至此就可以在不同页面中使用这个MediaElement了。给musicPlayer添加Source属性就可以全局播放音频,即使导航到其他页面也不会有影响。