Выбор нескольких изображений - PullRequest
2 голосов
/ 08 марта 2012

Подаю заявку в WP7 с помощью Windows Phone SDK 7.1 / C #

Использую задачу выбора фотографий.Но я хочу выбрать 9 изображений, и здесь я могу выбрать только одно изображение.

Как я могу выбрать 9 изображений подряд?

Пожалуйста, помогите мне, вот мой код:

public partial class MainPage : PhoneApplicationPage
{
    PhotoChooserTask photoChoserTask;
    // Constructor
    public MainPage()
    {
        InitializeComponent();
    photoChoserTask = new PhotoChooserTask();
    photoChoserTask.Completed += 
             new EventHandler<PhotoResult>(photoChooserTask_Completed);
    }


void photoChooserTask_Completed(object sender, PhotoResult e)
{
  if (e.TaskResult == TaskResult.OK)
  {
     y.Text= (e.ChosenPhoto.Length.ToString());

    //Code to display the photo on the page in an image control named myImage.
    //System.Windows.Media.Imaging.BitmapImage bmp = 
            //new System.Windows.Media.Imaging.BitmapImage();
    //bmp.SetSource(e.ChosenPhoto);
    //myImage.Source = bmp;
  }
}

private void Button_Click(object sender, RoutedEventArgs e)
{       
    {
        try
        {
            photoChoserTask.Show();
        }
        catch (System.InvalidOperationException )
        {
            MessageBox.Show("An error occurred.");
        }
    }
}

}
}

Ответы [ 4 ]

8 голосов
/ 25 декабря 2013

Я выпустил MultiPhotoChooser на CodePlex для WP8.0 (По крайней мере, работает на 8.0, потому что это платформа, на которой я разработал.)

Не стесняйтесь скачать и попробовать

https://multiphotochooser.codeplex.com/

Вот как это выглядит:

Media Library in Sweetshot App

Пожалуйста, дайте мне большие пальцы, если это помогло вам создать нужную вам функцию. Спасибо.

3 голосов
/ 08 марта 2012

PhotoChooserTask используется для выбора пользователем одной фотографии, Чтобы разрешить пользователю использовать несколько фотографий, необходимо создать собственный пользовательский интерфейс со списком отображаемых изображений. Вы можете использовать XNA.MediaLibrary для доступа к существующим изображениям устройств и отображения. Также предоставьте пользователю интерфейс для выбора нескольких изображений.

2 голосов
/ 08 марта 2012

В то время как PhotoChooserTask позволит пользователю выбрать только одно изображение из своей библиотеки (или захватить новое с их камеры, если для ShowCamera установлено значение true), другой вариант будет продолжать позволять пользователю итеративно выбиратьизображений и не позволяют им продолжать работу до тех пор, пока они не выберут 9 (я полагаю, что это требование, которое вы выполняете?)

public partial class MainPage : PhoneApplicationPage {
    public class SelectedPhoto : IDisposable {
        public Stream Data { get; private set; }
        public string Name { get; private set; }
        public BitmapImage Image { get; private set; }

        public SelectedPhoto(string name, Stream photo) {
            Name = name;

            Data = new MemoryStream();
            photo.CopyTo(Data);

            Image = new BitmapImage();
            Image.SetSource(Data);
        }

        public void Dispose() {
            Data.Dispose();
        }
    }

    private List<SelectedPhoto> _selectedPhotos = new List<SelectedPhoto>();
    private PhotoChooserTask photoChoserTask;

    // Constructor
    public MainPage() {
        InitializeComponent();
        photoChoserTask = new PhotoChooserTask();
        photoChoserTask.Completed += new EventHandler<PhotoResult>(photoChooserTask_Completed);

        ProcessImages.IsEnabled = false;
        ImageListBox.ItemsSource = _selectedPhotos
    }


    void photoChooserTask_Completed(object sender, PhotoResult e) {
        if (e.TaskResult == TaskResult.OK) {
            _selectedPhotos.Add(new SelectedPhoto(e.OriginalFileName, e.ChosenPhoto);

            Button.IsEnabled = _selectedPhotos.Count < 9;
            ProcessImages.IsEnabled = _selectedPhotos.Count == 9;
        }
    }

    private void Button_Click(object sender, RoutedEventArgs e) {
        {
            try {
                photoChoserTask.Show();
            } catch (System.InvalidOperationException) {
                MessageBox.Show("An error occurred.");
            }
        }
    }

    private void ProcessImages_Click(object sender, RoutedEventArgs e) {
        MessageBox.Show("Doing something with your images... please wait...");
    }
}

В вашем XAML вместо одного изображения, которое вы хотите поместить в изображениевнутри ListBox DataTemplate и покажите все введенные пользователем изображения (возможно, с возможностью стереть изображение и добавить другое изображение).Например,

    <ListBox x:Name="ImageListBox">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <Image Source="{Binding Image}" />
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <Button x:Name="ProcessImages" Click="ProcessImages_Click" />

Если требуется иметь от до 9 изображений, я бы предпочел этот подход по сравнению с настраиваемым множественным выбором изображений по нескольким причинам;

  1. Он предоставляет пользователю согласованный пользовательский интерфейс - такой же, какой он получал бы в любом другом приложении
  2. Используя MediaLibrary, ваше приложение потребует *Возможность 1019 * (отображается как «Доступ к библиотеке мультимедиа», я считаю).
  3. Я бы нашел этот метод чуть менее трудоемким, чем полноценный выбор носителя.
1 голос
/ 08 марта 2012

Задача PhotoChooserTask позволяет пользователю выбрать только одну фотографию.Я предполагаю, что вам нужно будет создать страницу или элемент управления, в котором вы будете показывать все доступные фотографии / изображения и делать их множественными для выбора с помощью CheckBox или чего-то еще и возвращать этот результат в свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...