1

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

由于这不是真的很好和直接,我想要你关于如何实现原始问题的想法:在页面/视图之间共享媒体元素。

4

1 回答 1

1

您可能要考虑使用 XAudio2,而不是使用 MediaElement。下面是如何完成它的演练:在 Windows 应用商店应用程序中播放背景音乐/音效 (C# XAML)

于 2012-10-25T06:40:48.440 回答