繁体   English   中英

在C#/ XAML Metro应用程序上导航后无法播放媒体文件

[英]Not able to play media file after navigation on C#/XAML metro app

在这里我粘贴代码。 我的应用程序具有访问音乐库的功能。 我没有收到任何异常,但导航后未播放媒体文件。 是托管在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;
    }
}

OnNavigatedTo的一个常见问题是,它是在Loaded事件触发之前被调用的,即实际将控件添加到可视化树时。 我只是在猜测,但是您可能需要在调用.Play()之前等待页面加载。 另外,我认为默认情况下,MediaElement设置为在设置源时自动播放,因此调用Play可能是不必要的,或者实际上可能是在这里中断的。 MediaElement在Windows 8 RTM中仍然存在许多基本错误,需要谨慎使用以解决它们。 这也是调用“ await WaitForLoadedAsync ()”以查看是否有必要等待该事件而不是在Loaded事件处理程序中寻找导航参数的绝佳用例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM