酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでResourcesを使ってテーマ・アクセントカラーを取得する

共有リソースのアプリケーションスコープのストアであるResourcesを参照することで、プログラム側からテーマ設定がLight/Darkのどちらになっているのか、アクセントカラーが何色であるかを取得することができます。

プログラムからResourceに格納されているリソースを利用することが可能です。Resourcesはキーと値のペアから成るDictionary型で、キーから値を取得することが可能です。

Dictionary型で格納するキーに文字列型を使用する場合、キーは大文字と小文字を区別しますので指定間違いがないようにしてください。さらに、Resourceにはobject型でリソースが格納されているため、利用する際には正しい型でキャストする必要があります。

プログラム側でテーマがLightかDarkかを判定

var light = (Visibility)Resources["PhoneLightThemeVisibility"];
var dark = (Visibility)Resources["PhoneDarkThemeVisibility"];
if (light == System.Windows.Visibility.Visible)
{
    // テーマはLight!!
}
else if (dark == System.Windows.Visibility.Visible)
{
    // テーマはDark!!
}

プログラム側でアクセントカラーの色情報を取得

// SolidColorBrushを取得する
var accentBrush = (SolidColorBrush)Resources["PhoneAccentBrush"];

// アクセントカラーを取得する
var accentColor = (Color)Resources["PhoneAccentColor"];

色情報を元に設定されているアクセントカラーを特定する

方法: Windows Phone のテーマ リソースを適用する」を参考に、色情報からアクセントカラーを特定するコードは以下の通りです。

var accentColor = (Color)Resources["PhoneAccentColor"];

var strAccent = "";
switch (accentColor.ToString())
{
    case "#FF1BA1E2": 
        strAccent = "blue"; 
        break;

    case "#FFA05000": 
        strAccent = "brown"; 
        break;

    case "#FF339933": 
        strAccent = "green"; 
        break;

    case "#FFE671B8": 
        strAccent = "pink"; 
        break;

    case "#FFA200FF": 
        strAccent = "purple"; 
        break;

    case "#FFE51400": 
        strAccent = "red"; 
        break;

    case "#FF00ABA9": 
        strAccent = "teal (viridian)"; 
        break;

    case "#FF8CBF26": 
    case "#FFA2C139": 
        strAccent = "lime"; 
        break;

    case "#FFFF0097": 
    case "#FFD80073": 
        strAccent = "magenta"; 
        break;

    case "#FFF09609": 
        strAccent = "mango (orange)"; 
        break;

    // ハードウェアメーカー or キャリアオリジナルカラー
    default: 
        strAccent = "custom eleventh color"; 
        break;
}

参考