Windows 8 ストアアプリテンプレート - Basic Photo紹介

Basic Photo テンプレートの解説です。

準備は、こちらを参照してください。
https://blogs.msdn.com/b/hirosho/archive/2012/09/09/apptemplateforwin8storeapp_5f00_intro.aspx

このテンプレートは、Visual Studio 2012がデフォルトで提供しているVisual C#のWindowsストアテンプレートのグリッドアプリテンプレートを基に作っています。グリッドアプリテンプレートで作成したプロジェクトに、

  • アイテムテンプレートの検索を追加
  • 検索時の検索ロジック(SearchResultsPage.xaml.cs)を追加
  • アイテムテンプレートの共有ターゲットを追加
  • ItemDetailPage.xaml.csに共有ソースロジック(OnDataRequestedメソッド)を追加
  • GroupedItemsPageにSemanticZoomを追加
  • App.xaml.csで設定チャームのヘルプとプライバシーポリシーの表示を追加
  • ヘルプページ(HelpPage.xaml)を追加

等の追加を行っています。元々のグリッドテンプレートで作られたページのデザインはいじっていないので、Snap表示も含め、デザインガイドラインに従った表示になっています。

各アプリ向けには、各画面の背景をアプリのフレーバーに即した背景色や画像への変更を行ってください。
以下、カスタマイズのポイントをいくつか紹介していきます。

固定画像の埋め込み

表示されている画像は、プロジェクトのAssetsフォルダーに格納されています。表示するグループ化された画像が固定的な場合は、一式をAssetsフォルダーに追加してください。エクスプローラーで画像が格納されたフォルダーを開き、追加したい画像を選択し、Visual Studio 2012のソリューションビューのAssetsフォルダーにドラッグ&ドロップすれば、プロジェクトに画像が追加されます。
F5実行で表示される画像群とグループ-項目の構成は、DataModelフォルダーのSampleDataSource.csのSampleDataSourceクラスのコンストラクターで実装されています(260行目付近)。この辺りのコードは、一目瞭然ですね。画像は、Assets/XXX.png等で指定されているので、そこを書き換えればOKです。

SampleDataGroupがグループの名前や画像を保持するクラスです。コンストラクタの引数は順番に

  • 識別子
    デフォルトでは文字列。GUID等でも可。キーとして使われ表示には使われない。
  • タイトル
    GroupedItemsPage、GroupDetailPage、ItemDetailPageのグループ名表示に使われる
  • サブタイトル
    GroupDetailPageのサブタイトル表示に使われる
  • コメント
    GroupDetailPageのGroup Descriptionで表示される文字列

です。アプリ向けに変えていきましょう。

SampleDataItemがグループに所属する項目の名前や画像を保持するクラスです。コンストラクタの引数は順番に

  • 識別子
    デフォルトでは文字列。GUID等でも可。キーとして使われ表示には使われない。
  • タイトル
    GroupedItemsPage、GroupDetailPage、ItemDetailPageのアイテム名表示に使われる。
  • サブタイトル
    GroupDetailPage、ItemDetailPageの各項目表示のアイテムのサブタイトルとして表示される。
  • コメント
    ItemDetailPageの詳細説明で使われる。

です。アプリ向けに変えていきましょう。作りたいアプリ向けに表示項目を追加したい場合は、SampleDataSource.csのSampleDataItemクラスにプロパティを追加します。たとえば”撮影者名”を追加したければ、

    private string _photographer;
public string Photographer
{
get { return this._photographer; }
set { this.SetProperty(ref this._photographer, value); }
}

といったように追加していきます。プロパティを新たに追加したら、SampleDataSourceのコンストラクタでのプロパティ値設定を忘れずに。

ネット上の画像を埋め込む

場合によっては、ネット上の画像を表示したい場合もあるでしょう。たとえば、

https://twimg0-a.akamaihd.net/profile_images/2247770464/MyFaceWFTrim.png

をアプリで表示したい場合(私のTwitter(@embedded_george)のアイコンですが何か?w)、SampleDataSourceのコンストラクタの中の

            group1.Items.Add(new SampleDataItem("Group-1-Item-1",
"Item Title: 1",
"Item Subtitle: 1",
"https://twimg0-a.akamaihd.net/profile_images/2247770464/MyFaceWFTrim.png",
"Item Description: Pellentesque porta, mauris quis interdum vehicula, urna sapien ultrices velit, nec venenatis dui odio in augue. Cras posuere, enim a cursus convallis, neque turpis malesuada erat, ut adipiscing neque tortor ac erat.",
ITEM_CONTENT,
group1));

といったように、画像の”Assets/XXX.png”の部分をURLに変更するだけで、ネット上の画像を表示することも可能です。

アプリによっては、グループ自体、グループに属する項目を都度条件に従って、ネットなどの情報から変えたい場合もあるでしょう。そんな場合の修正方法はまた別のポストで説明の予定です。画像については、ここで示した応用で色々とできるはずなので試してみてください。

ItemDetailPage表示の修正

このアプリのトップページと、グループ表示のページは、色合いやデザインをちょっといじれば、それなりの感じになります。XAMLでのスタイル定義を使ってうまくやってください。
ItemDetailPageは各アプリでかなり表示内容が変わると思われます。先ほど紹介したSampleDataItemにプロパティを追加した時などは、表示も変えないといけませんね。
ItemDetailPageは、FlipViewになっています。同一グループに属したアイテム群を切り替えて表示(左右にスライドさせることができる)できるようになっています。このFlipViewの中身ですが、ItemDetailPage.xamlの69行目あたりから始まっているRichTextColumnsタグで各アイテムの表示内容が定義されています。RichTextColumns自体は、CommonフォルダーのRichTextColumns.csファイルで定義されたコントロールです。複数の一連の項目を左から右へカラム形式でフロー的に表示する部品になっています。デフォルトでは、タイトル、サブタイトル、画像、コンテントの順番で表示されています。表示項目を増やしたい場合は、たとえば、先ほどのPhotographerを追加したとすれば、80行目と81行目の間に

                                    <Paragraph>
<Run FontWeight="SemiLight" Text="{Binding Photographer}"/>
<LineBreak/>
<LineBreak/>
</Paragraph>

と追加してあげれば、SampleDataItemのPhotographerプロパティに格納された値が表示されます。<Run/>は、RichTextColumnsの1カラムで文字列が適切に折り返す表示がなされる部品です。<LineBreak/>は改行を指定する部品です。

カラムの幅は、89行目のRichTextBlockOverflowのWidth属性を変えれば変更できるので整えてください。

以上、簡単に修正ポイントを紹介してきました。アプリの構想を練る時は、Entertainment Photoアプリテンプレートで作ったアプリを使ってみてください。アプリを作って、集めた画像を適宜追加して表示してみます。Entertainment Photoテンプレートは、Basic Photoアプリテンプレートの可変版なので、色々と画像を集めてみて試してみた後、Basic Photoアプリテンプレートで画像を固定するとよいでしょう。

皆さん、是非トライしてみてくださいね。