Windows Phone, выберите файл, используя PickSingleFileAndContinue или PickMultipleFilesAndContinue
Я застрял, пытаясь реализовать средство выбора файлов для приложения Windows Phone. Мне нужно выбрать файлы из галереи, используя 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();
}
Итак, что делать дальше? Я думаю, мне нужно получить объект файла или что-то.
Я нашел эту ссылку. Это MSDN объяснение, где пользовательский класс ContinuationManager
реализовано. Это решение выглядит странно и безобразно. Я не уверен, что это лучший. Пожалуйста помоги!
1 ответ
PickAndContinue - единственный метод, который будет работать на Windows Phone 8.1. Это не так странно и некрасиво, вот простой пример без 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 - это всего лишь помощник, который должен помочь облегчить некоторые вещи. Конечно, вы можете реализовать свое собственное поведение для более простых случаев.