この記事は、2012/7/13現在にリリースされている最新の「Windows 8 Release Preview(Build 8400)」、「Visual Studio 2012 RC」を利用しております。「Windows 8 Release Preview」は開発中のものであることにご留意ください。
Windows Phone 7ではローカルに保存されたファイルを選択するためには、独自にファイル選択ダイアログ(画面)を作成する必要がありました。
この記事では、FileOpenPickerクラスを使ってローカルに保存されているファイルを開く処理と、選択するファイル拡張子のフィルタリング、最初に開く場所の変更の仕方について紹介します。
Metro スタイル アプリでは、FileOpenPickerクラスを使って簡単にローカルに保存されたファイルを選択することができます。
Visual Studio 2012のXAMLデザイナを使って、ImageコントロールとButtonコントロールを配置してください。今回はFileOpenPickerの使い方の説明のみですので、ツールボックスからポトペタしてください。XAMLは以下の通りとなります。
<Page x:Class="OpenImageSample.MainPage" IsTabStop="false" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:OpenImageSample" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Image x:Name="pictureImage" HorizontalAlignment="Left" Height="242" Margin="181,66,0,0" VerticalAlignment="Top" Width="366"/> <Button Content="Open" HorizontalAlignment="Left" Margin="578,270,0,0" VerticalAlignment="Top" Click="Button_Click_1"/> </Grid> </Page>
FileOpenPickerクラスのインスタンスを生成し、ユーザーに選ばせたいファイル拡張子を1つ以上FileTypeFilterコレクションへ追加し、PickSingleFileAsyncメソッドでファイル選択UIを表示させることができます。
ここで注意しなければいけない点としては、ファイル拡張子の先頭は必ず「.」から開始し、ワイルドカード(*)を使ってはいけません。また、フィルタには1つ以上の拡張子を追加する必要があります。両方ともで例外が発生します。
最小限のサンプルコードを以下に示します。
var picker = new FileOpenPicker(); picker.FileTypeFilter.Add(".jpg"); var file = await picker.PickSingleFileAsync();
先ほどXAMLデザイナで配置したButtonコントロールがクリックされた場合、Button_Click_1を呼び出すようにしていました。選択UIには以下の2つのモードが存在しています。
PickerViewMode.List | アイテムの一覧を表示する(既定) |
PickerViewMode.Thumbnail | サムネイルイメージを表示する |
ここでは画像を選択させたいので選択UIの表示モードはサムネイルに設定します。表示モードを設定したい場合は、ViewModeプロパティにPickerViewMode.Listを設定します。
さらに選択UIで最初に表示される場所を設定することができます。以下の8つのうちのどれかから選択することができます。
PickerLocationId.DocumentsLibrary | ドキュメント ライブラリ(既定) |
PickerLocationId.ComputerFolder | コンピューターフォルダ |
PickerLocationId.Desktop | デスクトップ |
PickerLocationId.Downloads | ダウンロード |
PickerLocationId.HomeGroup | ホームグループ |
PickerLocationId.MusicLibrary | 音楽ライブラリ |
PickerLocationId.PicturesLibrary | 画像ライブラリ |
PickerLocationId.VideosLibrary | ビデオ ライブラリ |
ここでは、SuggestedStartLocationプロパティに画像ライブラリであるPickerLocationId.PicturesLibraryを設定します。
private async void Button_Click_1(object sender, RoutedEventArgs e) { // ローカルに保存されたファイルを取得する var picker = new FileOpenPicker(); // 表示モードはサムネイル形式 picker.ViewMode = PickerViewMode.List; picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; // カメラで撮影した画像だけで良いのでJPEGファイルのみを選択させるようにする picker.FileTypeFilter.Add(".jpg"); // JPEGファイルは.jpegの拡張子も一般的であるのでフィルタへ追加 picker.FileTypeFilter.Add(".jpdg"); // ファイルを一つだけ選択させます var file = await picker.PickSingleFileAsync(); // 取得した画像ファイルを読み込みImageコントロールで表示する var strm = await file.OpenReadAsync(); var bitmap = new BitmapImage(); bitmap.SetSource(strm); pictureImage.Source = bitmap; }
上記のコードを実行してみました。