tmytのらくがき

個人の日記レベルです

UWPのLightとDarkでリソースを切り替える

LightなテーマとDarkなテーマでリソースを切り替えるにはx:Keyで指定するのが楽です。

こんな感じに使います。

<ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Dark">
      <!-- Darkなリソースをここへ -->
    </ResourceDictionary>
    <ResourceDictionary x:Key="Light">
      <!-- Lightなリソースをここへ -->
    </ResourceDictionary>
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>

App.xamlとかに書いておけばStaticResourceまたはThemeResourceマークアップ拡張で参照できます。ちなみに、StaticResourceだとWindowsPhoneでテーマカラー変えたときに反応しないのでThemeResourceをおすすめします。

ThemeDictionariesの中はx:Keyが指定されたResourceDictionaryであればよいので、Sourceで別のファイルを参照もできます。

<ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Dark" Source="/Themes/Dark.xaml" />
    <ResourceDictionary x:Key="Light" Source="/Themes/Light.xaml" />
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>

こうしておくと、リソースがぐっちゃぐちゃにならないのでおすすめです。