gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:08:24 25 4
gpt4 key购买 nike

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

在下面的主题中,也有人问了这个问题:
http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/241ba3b4-3e2a-4f9b-a704-87c7b1be7988/

我做了吉姆曼的建议
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);始终返回 null,即使我尝试访问 Root 页面上的 MediaElemt。

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

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

关于windows-runtime - 导航到其他页面后继续播放的全局 MediaElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com