在页面之间共享MediaElement

时间:2012-10-24 22:22:24

标签: c# windows-runtime caliburn.micro mediaelement windows-store-apps

我想在我的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)。

由于这不是很好而且直截了当,我希望你的想法如何实现原始问题:在页面/视图之间共享媒体元素。

1 个答案:

答案 0 :(得分:1)

您可能需要考虑使用XAudio2,而不是使用MediaElement。以下是如何完成工作的演练:Playing of background music/sound effects in Windows Store Apps (C# XAML)