アプリ内テーマのすすめ

Windows Phone Advent Calendar 20日目の記事です。
■はじめに
 Windows Phoneのアプリケーションに、アプリ内テーマを適用する方法を紹介します。参考文献はコチラです。
 
 複数の画面を持つアプリケーションで、各画面に配置しているボタンやチェックボックスなどの配色をカスタマイズしつつ、全体で統一したいということがあります。画面毎/コントロール毎にプロパティを編集してもできますが、色味を変えたくなった時に、その都度すべてのコントロールのプロパティを編集しなければならないのは大変なことです。
  
 Androidは自身のアプリケーションの外観を統一させるために、Style Resourceという機能があります(Android UI前身のSWINGがその機能を持っており、それを継承していると思われます)。Style Resourceにデザイン要素を定義し、それを参照している画面はStyle Resourceのデザイン定義に従って描画を行います。
 
 Windows Phoneで同じことができないかと調べたところ、冒頭の文献を見つけました。
■開発手順

アプリ内テーマを適用したいプロジェクトに「Theme」フォルダを追加します。

Themeフォルダに「System.Windows.xaml」と「ThemeResources.xaml」を追加します。

ファイルは以下からダウンロードしてください。
System.Windows.xaml
ThemeResources.xaml

「System.Windows.xaml」と「ThemeResources.xaml」のビルドアクションを「Resource」に設定します。

App.xamlを編集します。

1
2
3
4
5
6
7
8
<!–アプリケーション リソース–>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme/System.Windows.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

App.xaml.csを編集します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System.Collections;
 
public App()
{

InitializeComponent();
 
// 以下を追加する
MergeCustomColors();
 
InitializePhoneApplication();

}
 
// テーマをマージするロジック
private void MergeCustomColors()
{
var dictionaries = new ResourceDictionary();
 
[...]

Tagged