Windows runtime 导航到其他页面后继续播放的全局MediaElement

Windows runtime 导航到其他页面后继续播放的全局MediaElement,windows-runtime,windows-store-apps,winrt-xaml,mediaelement,Windows Runtime,Windows Store Apps,Winrt Xaml,Mediaelement,我正在使用MediaElement在我的metro应用程序中播放音乐。 我希望即使我导航到另一个页面,音乐也能继续播放 在以下线程中,也提出了该问题: 我照杰曼的建议做了 1) 在App.xaml.cs中,更改了根框架的控制模板以包含MediaElement var rootFrame = new Frame(); rootFrame.Style = Resources["RootFrameStyle"] as Style; rootFrame.Navigate(typeof(HomePage

我正在使用MediaElement在我的metro应用程序中播放音乐。 我希望即使我导航到另一个页面,音乐也能继续播放

在以下线程中,也提出了该问题:

我照杰曼的建议做了 1) 在App.xaml.cs中,更改了根框架的控制模板以包含MediaElement

var rootFrame = new Frame();
rootFrame.Style = Resources["RootFrameStyle"] as Style;
rootFrame.Navigate(typeof(HomePage), MainViewModel.Instance);
Window.Current.Content = rootFrame;
Window.Current.Activate();
2) 在Styles.xaml中添加

<Style  x:Key="RootFrameStyle" TargetType="Frame">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Frame">
                <Grid>
                    <MediaElement x:Name="MediaPlayer" AudioCategory="BackgroundCapableMedia" AutoPlay="True"  />
                    <ContentPresenter />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>   
</Style>
但是VisualTreeHelper.GetChild(Window.Current.Content,0);始终返回null,即使我尝试访问根页面上的MediaElemt

我构建了一个小的示例项目来演示

有什么想法吗? 提前谢谢

致意
Fabian

在视觉树完全加载(添加到视觉树)之前,可能会调用尝试获取视觉树子级的导航处理程序。您可以尝试将代码移动到加载的事件处理程序

编辑*

我做了以下改变,证实了我的理论:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.Loaded += OnLoaded;
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        DependencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0);
        MediaElement rootMediaElement = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0);
    }
}

不,结果是一样的,对我来说,MediaElement似乎没有正确地放置在根框架中。它对我来说工作得很好。(注意,我使用的是发布预览,虽然这并不重要)非常感谢!现在可以了。你的下一杯啤酒(即使只是虚拟的)我请客!。问候FabianI我设法让它工作,让我的播放器在后台播放音乐,即使我切换帧,但我如何处理操作系统事件,如播放、暂停、下一首曲目等?我是否必须向每个视图添加重复的事件处理程序?或者在应用程序中是否有全局处理这些问题的方法?这听起来像是完全不同的问题。:)
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        this.Loaded += OnLoaded;
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        DependencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0);
        MediaElement rootMediaElement = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0);
    }
}