Windows Phone 8.1中的文件选择器

Gha*_*han 8 c# windows-phone-8.1

我想从Windows Phone 8.1中的图片专辑中选择一张图片.为此我使用了这段代码,但它给出了错误

private async void gallery_Tapped(object sender, TappedRoutedEventArgs e)
        {
            FileOpenPicker opener = new FileOpenPicker();
            opener.ViewMode = PickerViewMode.Thumbnail;
            opener.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            opener.FileTypeFilter.Add(".jpg");
            opener.FileTypeFilter.Add(".jpeg");
            opener.FileTypeFilter.Add(".png");

            StorageFile file = await opener.PickSingleFileAsync();
            if (file != null)
            {
                // We've now got the file. Do something with it.
                var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
                await bitmapImage.SetSourceAsync(stream);

                var decoder = await               Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);
                MyImage.Source=bitmapImage;
            }
            else
            {
                //OutputTextBlock.Text = "The operation may have been cancelled.";
            }
        }
Run Code Online (Sandbox Code Playgroud)

错误

在此输入图像描述

Sun*_*S C 15

我认为即使在您需要的页面中也可以处理OnActivated事件.像这样的东西

CoreApplicationView view = CoreApplication.GetCurrentView();

ImagePath=string.Empty;
FileOpenPicker filePicker = new FileOpenPicker();
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();
view.Activated += viewActivated; 

private void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1)
{
    FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs;

    if (args != null)
    {
        if (args.Files.Count == 0) return;

        view.Activated -= viewActivated;
        storageFileWP = args.Files[0];

    }
}
Run Code Online (Sandbox Code Playgroud)

当您从选择器中选择文件时,将调用上述方法.我相信它会对你有所帮助.


Rob*_*zco 12

使用Windows Phone 8.1中的FileOpenPicker从图片库中选择图片.

第1步:在Windows Phone 8.1应用程序中添加图片库功能.

图片库功能

第2步:添加文件打开选择器作为声明.

文件打开选择器声明

第3步:向MainPage.xaml添加一个按钮和图像.

<Grid>
<Image Name="img"/>
<Button Content="click me" Click="Button_Click"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

第4步:添加全局变量视图.

CoreApplicationView view;
Run Code Online (Sandbox Code Playgroud)

步骤4.1在页面构造函数中初始化.

view = CoreApplication.GetCurrentView();
Run Code Online (Sandbox Code Playgroud)

步骤5:添加代码以调用Button Click事件上的File Open Picker.

private void Button_Click(object sender, RoutedEventArgs e)
{
    FileOpenPicker filePicker = new FileOpenPicker();
    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();
    view.Activated += viewActivated; 
}
Run Code Online (Sandbox Code Playgroud)

步骤6:在View激活的事件上将图像设置为MainPage.

private async void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1)
{
  FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs;

  if (args != null)
  {
      if (args.Files.Count == 0) return;

      view.Activated -= viewActivated;
      StorageFile storageFile = args.Files[0];
      var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
      var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
      await bitmapImage.SetSourceAsync(stream);

      var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);
      img.Source=bitmapImage;
  }
}
Run Code Online (Sandbox Code Playgroud)

它还允许您拍照并使用它.

参考: 使用Windows Phone 8.1中的FileOpenPicker从图片库中选择图片