2012-03-08 129 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