我正在使用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来演示。
任何想法? 提前谢谢!
祝你好运 费边
答案 0 :(得分:2)
在可视化树完全加载(添加到可视树)之前,您可能会尝试使用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);
}
}