[わんくま名古屋] 第21回: Metro サンプルコード解説 (1/3)
4/14に開催された わんくま名古屋勉強会 で、 Windows 8 の Metro スタイルアプリについて喋りました。 そのときデモしたサンプルコードについて、 ちょっと解説しておきます。
当日の資料とサンプルコードは、 こちらから。 ⇒ 勉強会などで使った資料 - わんくま勉強会 名古屋#21
Metro のサンプルコードは、 WankumaNagoya21.zip です。
ソリューションには 3つのプロジェクトが入っていますが、 この記事では、 ひとつめの Demo1 だけを。
このデモでお見せすること
- ユーザーがファイルを指定して、ファイルの読み書き
- ユーザーがファイルを指定せず、プログラムからファイルの書き込み
- Windows API の利用
■ ユーザーに指定してもらって、ファイルの読み書き
FileOpenPicker / FileSavePicker を使います。
◆ FileOpenPicker でテキストファイルの読み込み
①のボタンを押すと、 FileOpenPicker の画面に切り替わるので、 そこでユーザーがテキストファイルを選んで OK すると、 ファイルが読み込まれて右側のテキストボックスに表示されます。
そのコードは次のようになります。
FileOpenPicker の PickSingleFileAsync() メソッドを呼び出すと、 Metro ランタイム側が管理しているファイル選択画面に切り替わり、 そこでユーザーがテキストファイルを選んで OK すると StorageFile オブジェクトが返ってきます。
StorageFile オブジェクトの OpenStreamForReadAsync() メソッドを使うと、 ファイルを読み出すことができます。
注意点:
- StorageFile オブジェクトは、パスやファイル名のプロパティを持っていますが、パスやファイル名から StreamReader オブジェクトを作ることはできません。
- ユーザーがファイルを選択しなかったときは、 PickSingleFileAsync() は null を返します。
◆ FileOpenPicker で画像ファイルの読み込み
②のボタンを押すと、前と同様にして、 今度は画像ファイルを読み込みます。
詳細は省略。
なお、 FileOpenPicker では、 File Open Picker contract に対応したアプリを通じてファイルを読み込むこともできます。(FileSavePicker も同じ)
下の画像では、 FileOpenPicker で SkyDrive アプリを通じて、 SkyDrive に置いてあるファイルが選択できる状態になっています。
画面全体は FileOpenPicker のものです (濃緑の部分) が、 その中に SkyDrive アプリ (白い部分) が埋め込まれたような恰好になっています。
※ コードのほうでは StorageFile オブジェクトを通じて読み書きをしているだけです。 それはローカルファイルだと思っていると、 じつは SkyDrive 上のファイルかもしれないのです。
◆ FileSavePicker でテキストファイルの書き出し
③のボタンを押すと、 FileSavePicker の画面に切り替わるので、 そこでユーザーがテキストファイルを選ぶか、 ファイル名を入力して OK すると、 ファイルが書き出されます。
- ユーザーがキャンセルしたときは、 PickSaveFileAsync() は null を返します。
- 上書きの確認は、 FileSavePicker の中で行われます。 呼び出し側では気にする必要がありません。
■ ユーザーの指定によらず、プログラムからファイルを書き出す
④のボタンを押すと、ユーザーのドキュメント フォルダー (マイ ドキュメント) に AutoSaved.txt という名前でファイルを書き出そうとします。
このコードを記述しただけだと、 実行時に System.UnauthorizedAccessException が発生してしまいます。 正しく実行できるようにするには、 package.appxmanifest に次の設定が必要です。
- Capability(「機能」)に「ドキュメント ライブラリ」
- Declaration(宣言)に、「ファイルの種類の関連付け」(.txt)
※ Capability については、 @IT の記事 「Metroスタイル・アプリの開発者が知るべき3つのこと」(2012/03/13) でも解説しています。
■ Windows API の利用
⑤のボタンを押すと、 テキストボックス中のひらがながカタカナに変換されます。 ⑥のボタンでは、 逆にひらがなに変換されます。
これは、 次のように Win32 API の LCMapStringW() を呼び出しています。
警告も出ずにビルドできて、 きちんと動作します。 しかし、 Windows App Cert Kit (WACK, Windows アプリ検証キット) でチェックすると FAILED とレポートされ、 Windows Store で配布できません。
WinRT だけを使っていればまず心配は無用なんでしょうが、 そうでないなら、 開発中にも頻繁に検証キットに掛けてみることをお勧めします。
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「-プログラミング ( わんくま )」カテゴリの記事
- [わんくま名古屋] 第21回: Metro サンプルコード解説 (1/3)(2012.04.15)
- [わんくま名古屋] 第21回は 4月 14日 - Windows 8 Metro をやるよ~♪(2012.04.12)
- [わんくま東京] 第59回の資料を公開しました(2011.06.02)
- [わんくま東京] 第59回は 5月 28日 - 名古屋から侵略します♪(2011.05.23)
- [わんくま名古屋] 第17回は 4月 9日 - TDD ネタで喋ります(2011.04.03)
「-プログラミング ( VS2012 )」カテゴリの記事
- Visual Studio/.NET Framework/WinRT のバグレポートを Visual Studio から提出して楽をする #vs2012 #vs2013(2014.03.31)
- Visual Studio/.NET Framework/WinRT のバグレポートを MS Connect に提出する #vs2012 #vs2013(2014.03.30)
- VS2012 Update2 の落とし穴 ~ BCL.Async と PCL [⇒解決](2013.04.15)
- Windows 8 RTM が MSDN で公開 ~ さぁ、 Metro アプリを作ろう!(2012.08.17)
- #cod2012jp 名古屋: Metro スタイルアプリ「くじ庵」制作記(2012.06.11)
「* プログラミング ( Metro スタイル )」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
- 【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる(2017.08.05)
この記事へのコメントは終了しました。
コメント