2012-03-08 5 views
2

Windows Phone SDK 7.1/C#複数の画像の選択

を使用してWP7でアプリケーションを作成しています。写真の選択タスクを使用しています。しかし、9つの画像を選択したいのですが、ここでは1つの画像しか選択できません。

画像を一度に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

は、ユーザがライブラリから1つの画像を選択できるようにします(または、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" /> 

要件がまでのイメージを持っているのであれば、私はいくつかの理由の理由から、カスタム複数選択画像選択の上に、このアプローチを好みます。

  1. それは、一貫したユーザーエクスペリエンスを持つユーザーを提供 - アクセスメディア」として表示されます(同じ彼らはMediaLibraryアプリケーションを利用することにより、他のアプリ
  2. に取得したいとはID_CAP_MEDIALIB能力が必要になりますライブラリ "、私は信じています)。
  3. 私は、この方法が完全に吹き飛ばされたメディアチェーザーより少し少ないことがわかります。
+0

はあなたが がエラー名「ProcessImages」は現在のコンテキスト内に存在しないことができるかどうか助けてくださいこと.... に2つのエラーを取得しています\t エラー「System.Windows .Controls.TextBlock 'に' ItemsSource 'の定義が含まれておらず、' System.Windows.Controls.TextBlock 'タイプの最初の引数を受け入れる拡張メソッド' ItemsSource 'が見つかりませんでした(usingディレクティブまたはアセンブリ参照?) –

+0

私が言及していた 'Button'と' ListBox'のサンプルXAMLを追加しました。 – MrMDavidson

+0

エラー非静的なフィールド、メソッド、またはプロパティ 'System.Windows.Controls.Control.IsEnabled.get'にオブジェクト参照が必要です –

1

PhotoChooserTaskは、ユーザーが写真を1枚だけ選択させることを意図しています。利用可能なすべての写真や画像を表示し、CheckBoxなどで複数選択可能にしてその結果をコードに戻すページやコントロールを作成する必要があります。

3

PhotoChooserTaskが表示された画像の一覧で、は、ユーザーが、あなたがあなた自身のUIを作成する必要がを複数の写真を使用することができるようにするには、1枚の写真を選択するようユーザに使用されています。 XNA.MediaLibraryを使用して、デバイスの既存イメージにアクセスして表示することができます。 また、複数の画像を選択するためのインターフェイスをユーザーに提供します。

8

私はそれは私が開発したプラットフォームですので、少なくとも8.0上で動作します(WP8.0 のためのCodePlex上MultiPhotoChooserをリリースしました。)

それをダウンロードし、それを試してみるお気軽に

https://multiphotochooser.codeplex.com/

ここ

それがどのように見えるかです:それは建物のためにあなたを助けた場合

Media Library in Sweetshot App

がアップ私に親指を与えてくださいあなたが必要とする機能おかげさまで

+0

いいです。がんばり続ける! :) –

+0

私は新しいアプリで試して、あなたにいくつかのフィードバックをお送りします。どうもありがとう。 –

+0

おかげで、その優れたアプリケーション – Debhere

関連する問題