Windows Phone,使用PickSingleFileAndContinue或PickMultipleFilesAndContinue选择文件

时间:2014-07-29 08:21:41

标签: c# windows-phone windows-phone-8.1

我试图为windows phone app实现文件选择器。我需要使用FileOpenPicker从图库中选择文件。我没有得到它的工作原理。这是我的代码:

private readonly FileOpenPicker photoPicker = new FileOpenPicker();

// This is a constructor
public MainPage()
{
    // < ... >

    photoPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
    photoPicker.FileTypeFilter.Add(".jpg");
}

// I have button on the UI. On click, app shows picker where I can choose a file
private void bChoosePhoto_OnClick(object sender, RoutedEventArgs e)
{
    photoPicker.PickMultipleFilesAndContinue();
}

那么,下一步该做什么?我想我需要获取文件对象或其他东西。

我找到了this link。这是msdn解释,其中实现了自定义类ContinuationManager。这个解决方案看起来很怪异和丑陋。我不确定它是否是最好的。请帮忙!

1 个答案:

答案 0 :(得分:12)

PickAndContinue是Windows Phone 8.1上的only method that would work。这不是那么奇怪和丑陋,这里有一个简单的例子没有 ContinuationManager

假设您要选择 .jpg 文件,请使用FileOpenPicker:

FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".jpg");
picker.ContinuationData.Add("keyParameter", "Parameter"); // some data which you can pass 
picker.PickSingleFileAndContinue();

运行PickSingleFileAndContinue();后,您的应用已停用。完成选择文件后,会触发OnActivated事件,您可以在其中读取您选择的文件:

protected async override void OnActivated(IActivatedEventArgs args)
{
    var continuationEventArgs = args as IContinuationActivatedEventArgs;
    if (continuationEventArgs != null)
    {
        switch (continuationEventArgs.Kind)
        {
            case ActivationKind.PickFileContinuation:
                FileOpenPickerContinuationEventArgs arguments = continuationEventArgs as FileOpenPickerContinuationEventArgs;
                string passedData = (string)arguments.ContinuationData["keyParameter"];
                StorageFile file = arguments.Files.FirstOrDefault(); // your picked file
                // do what you want
                break;
        // rest of the code - other continuation, window activation etc.

请注意,当您运行文件选择器时,您的应用程序将被停用,并且在极少数情况下,它可以由操作系统终止(例如,少量资源)。

ContinuationManager 只是一个帮助,应该有助于简化某些事情。当然,您可以针对更简单的情况实现自己的行为。