Silverlightから、Windows Phone 7のPicture HubにアクセスするAPIは用意されていませんが、Windows Phone 7のプラットフォーム上では、SilverlightとXNAを利用することが出来ます。
Silverlight側からXNA側のクラスを使うことで、Music+Video HubやPicture Hubにアクセスすることが可能になります。今回はPicture Hubの写真一覧にアクセスしてみましょう。
今回のポイントは、Microsoft.Xna.Framework.Media.MediaLibraryクラス(参照:MediaLibrary クラス)です。MediaLibraryのインスタンスからPicturesプロパティを参照します。
Microsoft.Xna.Framework.Media.MediaLibrary _mediaLibrary = new Microsoft.Xna.Framework.Media.MediaLibrary(); var list = _mediaLibrary.Pictures;
それでは、実際にListBoxへ表示させるまでをご紹介します。
ListBoxの定義
表示させるMainPage.xamlにListBoxを定義します。
<ListBox Name="listBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Height="601" Width="456"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <Image Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
Picture Hubの写真一覧を取得する
ソリューション エクスプローラーのプロジェクト以下にある参照設定を右クリックして,ポップアップから参照の追加を選択します。参照の追加ダイアログが立ち上がりますので,.NETタブからMicrosoft.XNA.Frameworkを探して選択してください。これでMicrosoft.Xna.Framework.Media名前空間が利用出来ます。
ListBoxにバインディングさせる用にPictureItemを定義します。
public class PictureItem { public System.IO.Stream Stream { get; set; } public BitmapImage ImageSource { get { return PictureItem.GetImage(Stream); } } static private BitmapImage GetImage(System.IO.Stream stream) { var bitmap = new BitmapImage(); bitmap.SetSource(stream); return bitmap; } }
アプリケーションの起動時に、MediaLibraryのPicturesCollectionから取得した画像一覧をListBoxのItemsSourceプロパティに割り当てます。
public partial class MainPage : PhoneApplicationPage { readonly Microsoft.Xna.Framework.Media.MediaLibrary _mediaLibrary = new Microsoft.Xna.Framework.Media.MediaLibrary(); private void PhoneApplicationPageLoaded(object sender, RoutedEventArgs e) { var list = _mediaLibrary.Pictures; listBox1.ItemsSource = from picture in list select new PictureItem { Stream = picture.GetThumbnail() };
上記のソースコードを実行させてみました。Picture Hubの画像一覧が表示されているのが判りますでしょうか。








