我想在我的 Windows 商店应用程序中播放歌曲。问题是,我想MediaElement
在页面之间“共享”,因为在导航到另一个页面时播放声音不应该停止。我正在使用最新的 Caliburn.Micro WinRT 端口。
我解决这个问题的第一个方法是在我有一个 2 行网格MediaElement
的地方。DefaultView
第二行包含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;
}
}
然后我试图将 my 绑定StartViewModel
到那个ContentFrame
做
public class MainViewModel : Screen
{
public MainViewModel()
{
this.ContentFrame = new StartViewModel(((App) Application.Current).GetDefaultInstance<INavigationService2>());
}
public DefaultViewModel ContentFrame { get; set; }
}
当我运行它时,StartView
它显示在MainView
网格内,但导航不再导航到正确的视图/视图模型(它实际上以某种方式再次加载 MainViewModel)。
由于这不是真的很好和直接,我想要你关于如何实现原始问题的想法:在页面/视图之间共享媒体元素。