2011年10月25日火曜日

Windows Phoneのテーマに関連したリソースを取得する。

Windows Phoneのテーマに関連した情報を引き出すにはどうしたら良いのか分からなかったので、Microsoft MVP for Deveice Application Development のCH3COOH(酢酸)センセイに訊いてみました。

酢酸センセイがこのように取得できますよと教えてくれたのが、次のブログエントリにあるようなコード。
http://ch3cooh.jp/index.php/tips/windowsphone7/system/resources/

要はResources[“要素名”]をキャストして代入ってことみたいなので、他の要素はどうなってるかなと思って調べたら、次のMSDNライブラリを見つけました。

Theme Resources for Windows Phone
http://msdn.microsoft.com/en-us/library/ff769552(v=VS.92).aspx

Windows Phoneアプリで苦労するのは、テーマが変更されたときにアプリが違和感なく表示されるかどうかです。画像とかも意外にテーマを変更したら画像が見えなくなったとかあります。テーマのチェックする際には、Resource[“要素名”]を忘れずに。

2011年10月11日火曜日

ページ遷移時のメソッドを整理する。

Windows Phoneのアプリの動作遷移に関しては、以前エントリで紹介しました。

アプリ起動と終了のイベントに関して整理してみる。

今回は、Windows PhoneアプリのActivatedイベントとDeactivatedイベントの間で発生するメソッドを整理したいと思います。overrideしておくと、ページ遷移の時に必ずコールされるようになるメソッドがあります。それが以下の3つのメソッドです。

  1. OnNavigatedFromメソッド
    このメソッドは、起動しているアプリケーションからDeactivatedイベントが発行される間に行われます。
  2. OnNavigatingFromメソッド
    このメソッドは、OnNavigatedFromメソッドよりも前に行われるメソッドです。
  3. OnNavigatedToメソッド
    このメソッドはOnNavigatedFromとは逆で、他のアプリケーションから自分のアプリケーションが戻るときのActivatedイベントが発行される間に行われます。

これらのメソッドの使い所としては、主にテンポラリ等のデータの保存処理と保存したデータの読み出し処理が多くなるかと思います。Windows Phoneアプリは、基本的に意図的に保存処理を記述しない限りデータや設定は保存されない仕組みです。そのため、Windowsボタンでホームに戻ったり、別のアプリケーションに遷移した場合は、アプリケーションがアクティブになったときに設定が保存されていないと、初期状態に戻ったりします。
それを防ぐために上記メソッド内で保存が必要な設定等の保存/読み出し処理を記述しておく必要があります。

イメージの制御で意外にこれで躓いたりしましたので、参考になればと思います。

2011年8月28日日曜日

「SketchFlow Template for Windows Phone」をExpression Blend日本語版から選択できるようにする。

Windows Phone SDK RC版が公開されて数日が経過しました。
皆さんも早速日本語対応等に追われてるかと思います。

今回はWindows Phoneアプリ開発で使えるExpression Blend用テンプレートとして、Windows Phone用のSketchFlowが作れる「SketchFlow Template for Windows Phone」があります。
http://wp7sketchflow.codeplex.com/

しかし、このテンプレートExpression Blend英語版でないと、インストールしても新規プロジェクト一覧で表示されません。

そこで、Expression Blend日本語版から新規プロジェクト一覧で表示するようにするには、以下のテンプレートフォルダからファイルを日本語用フォルダにコピーすることで表示できるようになります。

  • C:\Program Files (x86)\Microsoft Expression\Blend 4\ProjectTemplates\en\CSharp\WindowsPhone
    csWindowsPhonePrototype.zip
  • C:\Program Files (x86)\Microsoft Expression\Blend 4\Templates\en\CSharp\WindowsPhone
    SketchFlowCompScreen.zip
    SketchFlowNavScreen.zip

コピー先のフォルダは、上記で赤字にしているenjaに書き換えたフォルダにコピーしてください。
すると、新規プロジェクトでテンプレート一覧から「SketchFlow Template for Windows Phone」が選択できるようになっているはずです。

SketchFlowForWindowsPhone

SketchFlowは、画面遷移の設計などで役に立つテンプレートです。ぜひご活用ください。

2011年7月30日土曜日

アプリ起動と終了のイベントに関して整理してみる。

以前、「Windows Phoneのアプリケーションを強制的に終了させる。」という記事の中でアプリケーション起動のイベントに書いてみました。
もう少しこの辺の説明が必要かなと思いましたので、書いておきたいと思います。

アプリケーションの起動と終了には、以下の4種類のイベントが用意されています。

  1. Lauching
  2. Closing
  3. Activated
  4. Deactivated

これらのイベントは、それぞれ以下のようなタイミングでコールされます。

  1. Lauching
    アプリケーション一覧やショートカットタイルから起動したときに呼ばれるイベント。
    このイベントは1回しか呼ばれない。
  2. Closing
    【戻る】ボタンを押して、アプリケーションを終了するときに呼ばれるイベント。
    このイベントは1回しか呼ばれない。
  3. Activated
    他のアプリケーションからアプリケーションが復帰したときに呼ばれるイベント。
    このイベントは、復帰するたびに呼ばれる。
  4. Deactivated
    【戻る】ボタンの長押しや【Windows】ボタンを押したりして、一時的にアプリケーションを退避させたときに呼ばれるイベント。
    このイベントは、退避するたびに呼ばれる。

図というか、フローで表すとこんな感じです。

image

Windows PhoneアプリケーションのテンプレートにあるApp.xaml.csに上記イベントのメソッドが、すでに定義されていますので、実際に動かしてみて確認されてもよいかと思います。
この辺の動作は、アプリケーション申請でも厳しく見られるようなので注意していきましょう。

2011年7月18日月曜日

WPアプリケーションの強制終了に関する注意事項

昨日、アプリケーションを強制終了させる方法について記載しました。
この方法については、日本MSエバンジェリストの高橋忍さんが注意事項をブログで紹介されています。

開始画面以外では Back ボタンでアプリケーションを終了させるべきではない
http://blogs.msdn.com/b/shintak/archive/2011/07/17/10187268.aspx

本来、「はじめの画面でバックボタンを押した時にアプリケーションを終了させる」というのがWindows Phoneの操作ガイドラインにあります。強制終了という手順は、本来の操作から外れた行為になるのでよろしくないですよ、ということですね。

開発者として、ガイドラインを守るというのも大切なことになります。
不具合の調査などに個人の使用のみに留めるなど、配慮が必要でしょう。

アプリがノンアクティブになった場合や、逆にアクティブになったときに初期化する必要がある場合は、その都度初期化するようにイベントにコーディングする必要があると思います。

2011年7月17日日曜日

Windows Phoneのアプリケーションを強制的に終了させる。

アプリケーションを終了させる方法として、Windows Phoneアプリケーションでは、基本的に「終了させたいアプリケーションの最初のコンテンツでバックボタンを押すこと」により終了します。

ですが、アプリケーションの種類によっては「メニューから終了させたい」とか「バックボタンを押したらすぐに終了させたい」なんて仕様もあるかと思います。
ですが、Windows PhoneのSilverlightアプリケーションは基本的に何もしなければ履歴としてメモリ上に残ります。その証拠にバックボタンを長押しすると、アプリケーションの履歴が表示されて自分のアプリケーションが表示されていることが分かるかと思います。
この場合はどうすれば良いのか、この場合はアプリケーションを終了させるメソッドを用意する必要があります。

バックボタンを押した時に終了させる方法は、MSエバンジェリストの高橋忍さんがブログにてコードを紹介されています。こちらのコードをご覧になるのが一番参考になるかと思います。
http://blogs.msdn.com/b/shintak/archive/2011/07/16/10187146.aspx

要点は以下の点を把握しておく必要があります。

  • App.xaml.csに終了用のメソッドを用意します。
    このメソッドが、各コンテンツから終了させるためのものとなります。
  • 終了用のメソッドでは専用のExceptionを発行するようにします。
    この場合はQuitExceptionのように分かりやすい例外名を定義しておくと良いです。
  • ハンドルされていないExceptionはApplication_UnhandledExceptionメソッドが呼ばれます。
    このメソッドでExceptionをチェックし、該当の例外ならreturnさせます。
  • バックボタンが押されたかをアプリケーション上でチェックするには、overrideして、以下のメソッドを定義する必要があります。メソッドの定義はintellisenseが自動的に作成してくれます。
    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
    このメソッドを定義して、その中に条件を設定するなりして、終了用メソッドをコールするようにします。

また、併せてテンプレートで生成されるapp.xaml.csの以下の定義がどのようなタイミングでコールされるか、把握しておくと良いでしょう。

  • Application_Launching
    アプリケーションが起動するときにコールされます。
  • Application_Activated
    アプリケーションがアクティブになったときにコールされます。
  • Application_Deactivated
    アプリケーションから別のアプリケーションに切り替える時(バックボタンの長押し時)にコールされます。
  • Application_Closing
    アプリケーションが終了するときにコールされます。
  • Application_UnhandledException
    アプリケーション内でハンドルされていない例外がスローされたときにコールされます。

このあたりの処理は、アプリケーションを詰めていくと処理を記述する必要が出てくるようになると思います。

2011年7月16日土曜日

Windows Phone 開発向けのブログを開設しました。

すでに記事は「とある個人事業主のシステム開発メモ」というところで公開しているのですが、Windows Phone専門でこちらでも公開するようにしたいと思います。

主にライブラリの使い方とか、Blendとの連携とかを公開できれば良いかなぁと思っています。