多个图像选择

时间:2012-03-08 07:42:08

标签: c# visual-studio-2010 windows-phone-7

使用Windows Phone SDK 7.1 / C#在WP7中创建应用程序

使用照片选择器任务。但我想选择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 个答案:

答案 0 :(得分:8)

我在CodePlex for WP8.0上发布了MultiPhotoChooser (至少在8.0上工作,因为那是我开发的平台。)

随意下载并试用

https://multiphotochooser.codeplex.com/

以下是它的样子:

Media Library in Sweetshot App

如果它能帮助您构建所需功能,请竖起大拇指。 感谢。

答案 1 :(得分:3)

PhotoChooserTask用于用户选择一张照片要允许用户使用多张照片,您必须创建自己的用户界面,并显示图片列表。 您可以使用XNA.MediaLibrary访问设备的现有图像并显示。 还为用户提供选择多个图像的界面。

答案 2 :(得分:2)

虽然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的{​​{1}}内,并显示所有用户当前输入的图像(可能有一个擦除选项)一个图像,并添加一个不同的图像)。例如;

DataTemplate

如果要求最多 9张图像,我会更喜欢这种方法,而不是自定义多选图像选择器,原因有几个;

  1. 它为用户提供了一致的用户体验 - 与他们在任何其他应用中获得的体验相同
  2. 通过使用 <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" /> 您的应用程序将需要MediaLibrary功能(显示为“访问媒体库”,我相信)。
  3. 我发现这种方法比完全吹制的媒体选择器要少一些。

答案 3 :(得分:1)

PhotoChooserTask旨在让用户只选择一张照片。我猜你必须创建一个页面或控件,在其中显示所有可用的照片/图片,并使用CheckBox或其他东西将它们多选,并将结果返回给您的代码。