我想在我的windows-store应用中播放歌曲。
问题是,我希望在页面之间“共享”MediaElement
,因为在导航到其他页面时播放声音不应该停止。我正在使用最新的Caliburn.Micro WinRT端口。
我遇到此问题的第一个方法是在MediaElement
上设置DefaultView
,其中我有一个有2行的网格。
第二行包含MediaElement
(以及处理播放,暂停等所有控件),第一行是另一个frame
,我想在其中注入实际内容。
为了工作,我需要一些黑客攻击。 我创建了一个新界面
public interface INavigationService2 : INavigationService { }
和我自己的NavigationService
public class NavigationService : FrameAdapter, INavigationService2
{
public NavigationService(Frame frame, bool treatViewAsLoaded = false)
: base(frame, treatViewAsLoaded) { }
}
现在,我用CM注册了
public sealed partial class MainView
{
public MainView()
{
this.InitializeComponent();
MainView.InitializeComponentStatic(this);
}
private static bool _isInitialized;
private static void InitializeComponentStatic(MainView mainView)
{
if (_isInitialized) return;
((App)Application.Current).RegisterInstance(typeof(INavigationService2),
null, new NavigationService(mainView.ContentFrame));
_isInitialized = true;
}
}
然后我尝试将我的StartViewModel
绑定到ContentFrame
做
public class MainViewModel : Screen
{
public MainViewModel()
{
this.ContentFrame = new StartViewModel(((App) Application.Current).GetDefaultInstance<INavigationService2>());
}
public DefaultViewModel ContentFrame { get; set; }
}
当我运行它时,StartView
显示在MainView
网格中,但导航不再导航到右视图/ viewmodel(它实际上会以某种方式再次加载MainViewModel)。
由于这不是很好而且直截了当,我希望你的想法如何实现原始问题:在页面/视图之间共享媒体元素。
答案 0 :(得分:1)
您可能需要考虑使用XAudio2,而不是使用MediaElement。以下是如何完成工作的演练:Playing of background music/sound effects in Windows Store Apps (C# XAML)