2012-03-08 85 views
2

我正在使用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."); 
     } 
    } 
} 

} 
} 

回答

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,而不是一个单一的形象你想放一个图片里面ListBoxDataTemplate并显示用户当前输入的所有图像(可能有一个选项可以删除图像并添加不同的图像)。例如;

<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您的应用程序将需要ID_CAP_MEDIALIB能力(的显示为“媒体访问图书馆“,我相信)。
  3. 我会发现这种方法比全面播放媒体choser少一点工作。
+0

我得到在.... 两个错误,请帮助,如果你能 错误名称“ProcessImages”不在当前情况下存在\t 错误“System.Windows .Controls.TextBlock'不包含'ItemsSource'的定义,并且没有找到接受类型'System.Windows.Controls.TextBlock'的第一个参数的扩展方法'ItemsSource'(你是否缺少using指令或程序集引用?) – 2012-03-08 11:30:31

+0

我已经为我所指的'Button'和'ListBox'添加了示例XAML。 – MrMDavidson 2012-03-08 21:29:59

+0

错误非静态字段,方法或属性'System.Windows.Controls.Control.IsEnabled.get'需要对象引用 – 2012-03-24 07:29:10

1

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

3

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

8

我已经在CodePlex for WP8.0上发布了一个MultiPhotoChooser (至少可以在8.0上工作,因为这是我开发的平台。)

随意下载和尝试

https://multiphotochooser.codeplex.com/

下面是它的样子:

Media Library in Sweetshot App

请给我竖起大拇指,如果它帮助你建设你需要的功能。 谢谢。

+0

不错的。保持! :) – 2014-03-29 10:47:55

+0

我会在我的新应用程序中尝试它并向您发送一些反馈。非常感谢。 – 2014-06-21 11:10:52

+0

感谢兄弟,它是一个非常棒的应用程序 – Debhere 2015-05-09 16:17:11