我正在尝试使用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;
}
}
干杯:)
答案 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)
我在这里认出了你的实际错误。
检查屏幕截图。
我希望你也认识到了你的问题。
Capital-Small letter的一个错误可能让开发人员发疯了! : - )