0

ここにコードを貼り付けます。私のアプリには、音楽ライブラリにアクセスする機能があります。例外は発生していませんが、ナビゲーション後にメディア ファイルが再生されません。これがskydriveでホストされているプロジェクトです

MainPage.xaml

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Button Content="Click Me" Margin="563,357,0,373" Click="Button_Click_1"></Button>
</Grid>

MainPage.xaml.cs

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
    StorageFile file = await KnownFolders.MusicLibrary.GetFileAsync("video.mp4");
    Frame.Navigate(typeof(MediaPlayback), file);
}

MediaPlayback.xaml

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <MediaElement  x:Name="MyMediaPlayback" Height="350" Width="640"/>
</Grid>

MediaPlayback.xaml.cs

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    StorageFile file = e.Parameter as StorageFile;

    try
    {
        var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
        MyMediaPlayback.SetSource(stream, file.ContentType);
        MyMediaPlayback.Play();
    }
    catch (Exception)
    {
        throw;
    }
}
4

1 に答える 1

0

OnNavigatedTo の一般的な問題は、Loaded イベントが発生する前に呼び出されることです。これは、コントロールが実際にビジュアル ツリーに追加されるときです。推測にすぎませんが、.Play() を呼び出す前に、ページが読み込まれるまで待つ必要があるかもしれません。また、デフォルトでは、ソースを設定すると MediaElement が自動的に再生されるように設定されていると思います。そのため、Play の呼び出しは不要であるか、実際にはここで壊れている可能性があります。MediaElement には、Windows 8 RTM にまだ多くの基本的なバグがあり、それらを回避するには慎重に使用する必要があります。これは、「await WaitForLoadedAsync ()」を呼び出して、Loaded イベント ハンドラーでナビゲーション パラメーターを探すのではなく、そのイベントを待機する必要があるかどうかを確認するための優れたユース ケースでもあります。

于 2012-09-29T05:22:30.240 に答える