WP8.1 应用程序中的 Filepicker 没有显示任何照片

Filepicker in WP8.1 app did not show any photo

我需要制作一个工具,让用户可以从图库中选择照片。选择照片后,将在ImageBox中显示给用户。

问题是,当用户在图库中选择一些照片时,图库关闭,ImageBox 保持为空。代码 returns 没有错误。请帮我找出错误并解决这个问题。谢谢。

代码如下:

ImagePath = String.Empty

    filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary
        filePicker.ViewMode = PickerViewMode.Thumbnail
        ' Filter to include a sample subset of file types
        filePicker.FileTypeFilter.Clear()
        filePicker.FileTypeFilter.Add(".bmp")
        filePicker.FileTypeFilter.Add(".png")
        filePicker.FileTypeFilter.Add(".jpeg")
        filePicker.FileTypeFilter.Add(".jpg")
        filePicker.PickSingleFileAndContinue()


        Dim BitmapImage = New BitmapImage()
        Await BitmapImage.SetSourceAsync(filePicker)
        MyPhoto.Source = BitmapImage

如果您使用的是 filePicker.PickSingleFileAndContinue(),则需要将代码添加到 App_Activated

您会注意到 PickSingleFileAndContinue() 是一个 void 方法,不会 return 选择的文件,因为 PickSingleFileAsync() 将 return 一个文件。

代码块在 C#,抱歉我对 vb 的了解有限,您可以在下面找到 vb 示例

Similar SO Answer

C#

FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".png");

StorageFile file = await openPicker.PickSingleFileAsync();

当您使用 PickSingleFileAndContinue() 时,您需要实施 ContinuationManager 以获取您选择的文件。

在App.xaml.cs

public ContinuationManager ContinuationManager { get; private set; }

这将在应用程序激活时触发

    protected async override void OnActivated(IActivatedEventArgs e)
    {
        base.OnActivated(e);

        continuationManager = new ContinuationManager();

        Frame rootFrame = CreateRootFrame();
        await RestoreStatusAsync(e.PreviousExecutionState);

        if(rootFrame.Content == null)
        {
            rootFrame.Navigate(typeof(MainPage));
        }

        var continuationEventArgs = e as IContinuationActivatedEventArgs;
        if (continuationEventArgs != null)
        {
            Frame scenarioFrame = MainPage.Current.FindName("ScenarioFrame") as Frame;
            if (scenarioFrame != null)
            {
                // Call ContinuationManager to handle continuation activation
                continuationManager.Continue(continuationEventArgs, scenarioFrame);
            }
        }

        Window.Current.Activate();
    }

页面中的用法

假设您的应用程序的一个页面包含调用 FileOpenPicker 以选择现有文件的代码。在这个 class 中,从 ContinuationManager 助手 class 实现相应的接口。当您的应用程序使用 FileOpenPicker 时,要实现的接口是 IFileOpenPickerContinuable。

 public sealed partial class Scenario1 : Page, IFileOpenPickerContinuable
{
    ...

//inside this you have this

private void PickAFileButton_Click(object sender, RoutedEventArgs e)
    {
        ...
        FileOpenPicker openPicker = new FileOpenPicker();
        openPicker.ViewMode = PickerViewMode.Thumbnail;
        openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
        openPicker.FileTypeFilter.Add(".jpg");
        openPicker.FileTypeFilter.Add(".jpeg");
        openPicker.FileTypeFilter.Add(".png");

        // Launch file open picker and caller app is suspended
        // and may be terminated if required
        openPicker.PickSingleFileAndContinue();
    }
}


switch (args.Kind)
    {
        case ActivationKind.PickFileContinuation:
            var fileOpenPickerPage = rootFrame.Content as IFileOpenPickerContinuable;
            if (fileOpenPickerPage != null)
            {
                fileOpenPickerPage.ContinueFileOpenPicker(args as FileOpenPickerContinuationEventArgs);
            }
            break;

        ...
    }

Download msdn sample here

Msdn documentation using FilePicker