1

Windows ストア アプリで曲を再生したい。MediaElement問題は、他のページに移動するときにサウンドの再生が停止してはならないため、ページ間で「共有」したいということです。最新の Caliburn.Micro WinRT ポートを使用しています。

この問題に対する私の最初のアプローチは、2 行のグリッドがある場所MediaElementに配置することでした。DefaultView2 行目にはMediaElement(および再生、一時停止などを処理するすべてのコントロール) が含まれ、1 行目は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が、ナビゲーションは正しいビュー/ビューモデルに移動しなくなります (実際には何らかの方法で MainViewModel を再度読み込みます)。

これは本当に素晴らしくて簡単ではないので、ページ/ビュー間でメディア要素を共有するという元の問題を解決する方法についてのアイデアが必要でした.

4

1 に答える 1

1

MediaElement を使用する代わりに、XAudio2 の使用を検討することをお勧めします。やり方はこちら:WindowsストアアプリでのBGM・効果音の再生 (C# XAML)

于 2012-10-25T06:40:48.440 に答える