PR

 最後にSilverlightベースの簡単なテキストエディター「MyMemo」を作り、この特集を締めくくることにしましょう。図24は、MyMemoを操作している様子です。画面の下には「アプリケーションバー(applicationbar)」を付けています。そのメニュー項目には、new(新規作成)、open(ファイルを開く)、save(ファイルに保存)、delete(ファイルを削除)、version(バージョン情報を表示)を用意しています。

図24●作成したテキストエディタ「MyMemo」の操作例
図24●作成したテキストエディタ「MyMemo」の操作例
[画像のクリックで拡大表示]

 アプリケーションバーのボタンには、編集時にカーソルを左へ動かす「previous」、右へ動かす「next」、テキストボックスでソフトウエアキーボードを使うかどうかを切り替える「keyonoff」を用意しました。keyonoffは、編集内容が多くなってスクロールが必要になった際に使うボタンです。ソフトウエアキーボードの有効/無効は、右上の「Softkey:On」などの表示で確認できます。

2枚のページを用意

図25●MainPage.xamlのコントロール(主なもの)。ふき出しにはコントロールの種類と名前を示す
図25●MainPage.xamlのコントロール(主なもの)。ふき出しにはコントロールの種類と名前を示す
[画像のクリックで拡大表示]

 MyMemoは、MainPageとPageSelectFileという2枚のページを持ちます。MainPage.xamlには、図25のようにコントロールを貼り付けました*9。当初はTextBoxを単純に貼り付けたのですが、それではスクロールができないことが判明し、ScrollViewerを貼って、その上にStackPanelを貼り、さらにその上にTextBoxを貼り付けるようにしました。リスト2の(1)がその部分です。TextBoxでは、複数行を扱えるようにするため、AcceptsReturnをTrueに設定し、TextWrappingをWrapに設定しています。文字数が多くなっても表示できるように、HeightはAutoです。

 画面下部のアプリケーションバーのコードは、ページのXAMLコード上に、コメントアウトされた形で記述されています。コメント記号を取り去って、必要な編集を加えたのがリスト2の(2)です。ボタンの画像は、appbar.back.rest.pngなどの、Windows Phone Developer Toolsに含まれるファイルを利用しました*10。これらの画像は、プロジェクトに追加した上で、プロパティ ウィンドウでBuildActionをContentに設定する必要があります。

ファイル選択用のページを作成

図26●PageSelectFile.xamlのコントロール(主なもの)。ふき出しにはコントロールの種類と名前を示す
図26●PageSelectFile.xamlのコントロール(主なもの)。ふき出しにはコントロールの種類と名前を示す
[画像のクリックで拡大表示]

 PageSelectFileは、ファイル選択に使うページです。図26のようにコントロールを貼り付けました。ListBoxコントロールのlistBoxFileは、背景色(Background)をSolidにし、緑色にしました。FontSizeは40にしています。

 MainPageのコードであるMainPage.xaml.csをリスト3に、PageSelectFileのコードであるPageSelectFile.xaml.csをリスト4に示します。ざっと見ていきましょう。

 リスト3の(1)は、ページが今しようとしている動作を定義する列挙型です。値はNone(何もしない)、Open(ファイルを開く)、Save(ファイルを保存する)、Delete(ファイルを削除する)の四つです。

 TempFilenameは、一時ファイルの名前です。ページからページへ移動するときにtextBoxMainの内容が消えてしまうので、それを一時的に格納するのに用います。ApplicationNameはアプリケーション名で、起動時に(3)でアセンブリ名を取得して格納するようにしています*11。MyActionは(1)のAction型の値を保持する変数です。ApplicationNameとMyActionはstaticにして、ページの各インスタンスで同じ値を設定/取得できるようにします。Filenameはファイル名を保持するプロパティで、編集するファイルの名前が変わったときにApplicationTitle.Textを変化させるようにしています。

作成したファイルを保存する

 図24(c)ではファイルの保存をしました。アプリケーションバーのメニューで「save」を選んだときに呼び出されるのは(4)のmenuItemSave_Clickです。(5)のif文で保存すべき内容があることを確認できたら、(6)でSaveFileメソッドを呼び出して、textBoxMain.TextをTempFilenameに保存します。

 SaveFileメソッドは(13)にあります。Windows Phoneアプリケーションがファイルを保存できるのは、アプリケーションに割り当てられた「分離ストレージ(isolated storage)」の中だけです。(14)でIsolatedStorageFileオブジェクトを、(15)でIsolatedStorageFileStreamオブジェクトを作り、(16)でStreamWriterクラスのWriteメソッドを使って文字列をファイルに書き込みます。

 (7)ではこれから行うべき動作をSaveとし、(8)でPageSelectFileに移動します。パラメーターとして「Save」という文字列を添えます。処理はリスト4の(17)に移ります。(18)でApplicationTitle.Textを設定し(「MyMemo」になります)、(19)でファイル一覧を取得してlistBoxFileに表示します。拡張子が「.txt」(大文字小文字は問わない)のファイルだけを表示するようにしています。(20)では送られたパラメーターをmsgに取得して、PageTitle.Textを設定します。この場合は「SaveFile」になります。

 リストボックスでファイルを選択すると(21)が呼び出され、そのファイル名がtextBoxFileNameに入ります。図24(e)で見たように、textBoxFileNameに直接入力することも可能です。OKボタンを押すと(22)が呼び出されます。(23)でファイル名が空でないことを確認できたら、(24)で拡張子をチェックし、「.txt」でない場合はそれを追加します。(25)でファイル名を添付し、MainPageへ移動します。

 処理はリスト3の(9)に移ります。今はMyActionがAction.Saveなので、(10)が実行されます。(10)では、(12)にあるLoadFileメソッドを使って一時ファイルから文字列を読み出し、それをmsgで受け取った名前のファイルに保存します。(11)では、msgで受け取った名前のファイルから文字列を読み出し、textBoxMainに表示します。

☆     ☆     ☆

 Windows Phoneのプログラミング、いかがでしたか? APP HUBの会員にならなければいけない、アプリケーションを配布する際はAPP HUB経由でなければいけない、配布するにはアプリケーション審査に通らなければいけないといった、Windowsプログラミングでは考えられない制限があるのは事実です。でも、関係者によれば「iPhone/iPadと同様」とのことなので、新しいソフトウエアの配布モデルはこういうものなのかもしれません。