FileOpenPicker没有给出文件路径

时间:2015-04-17 23:56:25

标签: c# silverlight windows-phone-8

我正在尝试使用fileopenpicker来为我提供所选文件的文件路径,但是,当fileopenpicker恢复时,它不会给我文件路径,不使用ContinueFileOpenPicker方法,我在其上放置了一个断点,它没有触发。有什么想法为什么? 我正在使用Windows Phone Silverlight 8.1。

private async void btnPickFile_Click(object sender, RoutedEventArgs e)
    {
        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.ViewMode = PickerViewMode.List;
        openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
        openPicker.FileTypeFilter.Add("*");
        openPicker.ContinuationData["filePath"] = "GetFilePath";
        openPicker.PickSingleFileAndContinue();

    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var app = App.Current as App;
        if (app.FilePickerContinuationArgs != null)
        {
            this.ContinueFileOpenPicker(app.FilePickerContinuationArgs);
        }
    }

    public async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args)
    {
        if ((args.ContinuationData["filePath"] as string) == "GetfilePath" &&
            args.Files != null &&
            args.Files.Count > 0)
        {
            StorageFile file = args.Files[0];
            string filePath = file.Path;
            FilePath.Text = file.Path;
        }         
    }

干杯:)

2 个答案:

答案 0 :(得分:1)

如果问题只是断点没有命中,那么请确保您在调试模式下运行应用程序。如果您将在发布模式下运行您的应用程序,则不会遇到任何断点。如果您遇到问题,请继续阅读。

您可以按照here

中的步骤操作

你的代码看起来还不错,但你可能会遗漏某些地方。在这里,我将使用代码片段简要介绍该过程。

第一步: 编写代码以在任何事件处理程序中的特定页面中打开文件选择器。

    // MainPage.xaml.cs file

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.FileTypeFilter.Add("*");
        openPicker.CommitButtonText = "Select";
        openPicker.ContinuationData["Operation"] = "pickFile";
        openPicker.PickSingleFileAndContinue();
    }

然后,项目的App.xaml.cs文件

中添加的内容很少

第二步:App.xaml.cs FileOpenPickerContinuationEventArgs文件中声明一个全局变量。

    public FileOpenPickerContinuationEventArgs FilePickerContinuationArgs { get; set; }

第三步: 当您的应用在获取文件后恢复时,它会调用ContractActivated事件,因此需要在InitializePhoneApplication中的App.xaml.cs方法中处理该事件。

    // Handle contract activation such as a file open or save picker
    PhoneApplicationService.Current.ContractActivated += Application_ContractActivated;

现在在Application_ContractActivated文件中定义事件处理程序App.xaml.cs,如下所示。

    // App.xaml.cs file

    // Code to execute when a contract activation such as a file open or save picker returns 
    // with the picked file or other return values
    private void Application_ContractActivated(object sender, Windows.ApplicationModel.Activation.IActivatedEventArgs e)
    {
        var filePickerContinuationArgs = e as FileOpenPickerContinuationEventArgs;
        if (filePickerContinuationArgs != null)
        {
            this.FilePickerContinuationArgs = filePickerContinuationArgs;
        }
    }

第四步: 现在返回到您要拨打FileOpenPicker的页面,并按以下方式覆盖OnNavigatedTo()方法。

    // MainPage.xaml.cs file

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var app = App.Current as App;
        if (app.FilePickerContinuationArgs != null)
        {
            this.ContinueFileOpenPicker(app.FilePickerContinuationArgs);
        }
    }

然后按照以下定义ContinueFileOpenPicker事件处理程序。

    // MainPage.xaml.cs file

    public async void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args)
    {
        if ((args.ContinuationData["Operation"] as string) == "pickFile" &&
            args.Files != null &&
            args.Files.Count > 0)
        {
            StorageFile file = args.Files[0];
            string filePath = file.Path;
            MessageBox.Show(filePath);
        }
    }

你已经完成了!! !! 如果你做的一切正确,这段代码就可以了。

希望它有帮助.. 干杯..

答案 1 :(得分:1)

我在这里认出了你的实际错误。

检查屏幕截图。

enter image description here

我希望你也认识到了你的问题。

Capital-Small letter的一个错误可能让开发人员发疯了! : - )