Jaa


Windowsストア アプリの作り方解説 今日の運勢編 第4回 ~テンプレートの変更~

マイクロソフトの田中達彦です。
本連載では、「今日の運勢」というWindowsストア アプリの開発元に情報をいただき、このアプリがいかにして作られたかを解説します。
今回は、アイテムの見た目を変えるために、StandardStyle.xamlに手を入れます。

[アイテムの見た目]
Visual Studio 2012で作成したグリッド アプリケーションのハブページでは、アイテムを以下のように表示しています。

一方、今日の運勢では、アイテムを以下のように表示しています。

(縮尺は同じ)

1つのアイテムの大きさが、グリッド アプリケーションでは250x250なのに対して、今日の運勢のアイテムは200x200と少し小さめになっています。
タイトルとサブタイトルの表示位置も、グリッド アプリケーションでは上下に表示されていますが、今日の運勢では左右に表示しています。

アイテムは、XAMLで書かれたテンプレートを使用して表示されています。
このテンプレートを変更すると、自分が好きなレイアウトを使用できます。
どのテンプレートを使用しているかを調べるには、ハブページのUIを記述しているXAMLファイルであるGroupedItemsPage.xamlの中を見てみます。
その中に、以下の記述があります。

<!-- ほとんどのビューステートで使用される水平スクロール グリッド-->
<GridView
    x:Name="itemGridView"
    AutomationProperties.AutomationId="ItemGridView"
    AutomationProperties.Name="Grouped Items"
    Grid.RowSpan="2"
    Padding="116,137,40,46"
    ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
    ItemTemplate="{StaticResource Standard250x250ItemTemplate}"
    SelectionMode="None"
    IsSwipeEnabled="false"
    IsItemClickEnabled="True"
    ItemClick="ItemView_ItemClick">

ItemsTemplateという文字を探すと、以下の文が見つかります。

    ItemTemplate="{StaticResource Standard250x250ItemTemplate}"

ここで使用しているテンプレートは、Standard250x250ItemTemplateだということがわかります。
Standard250x250ItemTemplateは、ソリューション エクスプローラーに表示されているCommonを展開したところに入っている、StandardStyles.xamlに含まれています。
その中を検索すると、以下のXAMLで書かれたテンプレートが見つかります。

<!-- GroupedItemsPage と ItemsPage に表示される、グリッドに適した 250 ピクセルの四角形のアイテム テンプレート -->
<DataTemplate x:Key="Standard250x250ItemTemplate">
    <Grid HorizontalAlignment="Left" Width="250" Height="250">
        <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
            <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
        </Border>
        <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
            <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0"/>
            <TextBlock Text="{Binding Subtitle}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
        </StackPanel>
    </Grid>
</DataTemplate>

これがグリッド アプリケーションのハブページのアイテムを見た目を形成している本体です。
この中では、以下のことが定義されています。

- 幅、高さは250
- その中に指定された画像を表示する。表示方法はUniformToFill (縦横比を変えずに、空白が生じないようになるべく広い範囲を表示させる)
- 下のほうに半透明の黒い帯を表示される
- 黒い帯の中にタイトルとサブタイトルを縦方向に表示させる

[テンプレートの追加]
このテンプレートはそのまま残し、新たに星座を選択させるためのテンプレートを追加します。
ここでは、以下のStandard200x200ItemTemplateというテンプレートを追加しています。

<DataTemplate x:Key="Standard200x200ItemTemplate">
    <Grid HorizontalAlignment="Left" Width="200" Height="200">
        <Border Background="Transparent">
            <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
        </Border>
        <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
            <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="22" Margin="8,4,15,0"/>
        </StackPanel>
        <TextBlock VerticalAlignment="Bottom" TextAlignment="Right" Text="{Binding Subtitle}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" FontSize="28" FontFamily="Segoe UI Light" TextWrapping="NoWrap" Margin="15,0,2,-7"/>
    </Grid>
</DataTemplate>

新規に追加したこのテンプレートは、以下のことを定義しています。

- 幅、高さは200
- その中に指定された画像を表示する。表示方法はUniformToFill (縦横比を変えずに、空白が生じないようになるべく広い範囲を表示させる)
- 画像の背景は透明色とする
- 下のほうに半透明の黒い帯を表示される
- 黒い帯の中にタイトルを左詰めで表示させる
- 下の右のほうにサブタイトルを表示させる。フォントサイズ、フォント名も指定している

テンプレートを追加したら、GroupedItemsPage.xamlのテンプレートを指定している部分を、新たに追加したテンプレートに変更します。

次回は、星座選択ページの仕上げについて説明します。

[記事一覧]
第1回 開発のための環境構築
第2回 グリッド アプリケーションの中身を理解する
第3回 データの変更
第3回のソースコード
第4回 テンプレートの変更
第5回 GroupedItemsPageの仕上げ
第6回 別のGroupedItemsPageの追加

マイクロソフト
田中達彦