加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-runtime – 导航到其他页面后继续播放的Global MediaEle

发布时间:2020-12-14 05:36:25 所属栏目:Windows 来源:网络整理
导读:我正在使用MediaElement在我的地铁应用程序中播放音乐. 即使我导航到另一个页面,我也希望音乐继续播放. 在下面的线程中,该问题也被提出: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/241ba3b4-3e2a-4f9b-a704-87c7b1be7988/
我正在使用MediaElement在我的地铁应用程序中播放音乐.
即使我导航到另一个页面,我也希望音乐继续播放.

在下面的线程中,该问题也被提出:
http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/241ba3b4-3e2a-4f9b-a704-87c7b1be7988/

我做了JimMan的建议
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>

3)访问导航到的页面上的MediaElement:

DendencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content,0);     
MediaElement rootMediaElement = (MediaElement)VisualTreeHelper.GetChild(rootGrid,0);

但是VisualTreeHelper.GetChild(Window.Current.Content,0);即使我尝试访问Root页面上的MediaElemt,也始终返回null.

我建立了一个示例Project以进行演示.

Sample Project

有任何想法吗 ?
提前致谢 !

最好的祝福
法比安

解决方法

在可视化树完全加载(添加到可视树)之前,您可能尝试使用Navigated处理程序来尝试获取可视树子项.您可以尝试将代码移动到Loaded事件处理程序.

编辑*

我通过做出以下改变来证实我的理论:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读