如何将选择的文件详细信息传递到另一个页面 - UWP?

时间:2017-10-09 05:59:39

标签: c# xaml uwp windows-10 visual-studio-2017

我有一个启动器页面(MainPage1.xaml)。有一个按钮可以从设备中选择视频文件。现在我想在下一页(MainPage2.xaml)上播放所选文件。如何在下一页上获取此选定文件StorageFile file

  private async void Button_Click(object sender, RoutedEventArgs e)
    {  
        StorageFile file;

        FileOpenPicker openPicker = new FileOpenPicker();
        foreach (string extension in FileExtensions.Video)
        {
            openPicker.FileTypeFilter.Add(extension);
        }
        file = await openPicker.PickSingleFileAsync();

        this.Frame.Navigate(typeof(MainPage2), file);
    }

3 个答案:

答案 0 :(得分:1)

您必须覆盖页面中的OnNavigatedTo()方法(下一页),期望StorageFile

protected override void OnNavigatedTo(NavigationEventArgs e)
{
     if (e.Parameter != null)
     {
        StorageFile file = (StorageFile)e.Parameter;
     }
}

希望这会有所帮助..

答案 1 :(得分:0)

覆盖DestinationPage中的OnNavigatedTo

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  base.OnNavigatedTo(e);

  var parameters = e.Parameter;  // it will give your file reference
}

答案 2 :(得分:0)

这有两个部分:如其他答案中所述,Navigate方法的第二个参数将传递给NavigationEventArgs.Parameter中的OnNavigatedTo。

这对基本类型有用,但对于StorageFile来说还不够。引自Frame.Navigate docs

  

parameter Object传递给目标页面的导航参数;   必须具有要支持的基本类型(字符串,字符,数字或GUID)   使用GetNavigationState进行参数序列化。

StorageFile可用于直接导航,但由于它不可序列化,因此可能会在后台堆栈中丢失,同时暂停等等。

而不是直接传递StorageFile将其存放在全局字典中,并传递一个字符串或GUID键,OnNavigatedTo方法可以使用该键来查找另一侧的StorageFile。

对于StorageFile的特定情况,您可以使用FutureAccessList。见Track recently used files and folders