しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

テーマ始めました

f:id:shiba-yan:20071223002209p:image
暇つぶしに Windows 標準のテーマを作りました、というかほぼすべてのデフォルトスタイルを削除しただけなので数分でできましたが。
同時にスタイルを動的に切り替える方法を試していたところ、リソースのコレクション*1に追加したり削除するだけで自動的に切り替わることがわかりました。
スタイルを定義している XAML ファイルは Applicaton.LoadComponent で読み込みます。

// ./Themes/Default.xaml を読み込む
ResourceDictionary dictionary = (ResourceDictionary)Application.LoadComponent(new Uri("./Themes/Default.xaml", UriKind.Relative));
// リソースコレクションに追加
Application.Resources.MergedDictionaries.Add(dictionary);

本来なら、以前に追加した ResourceDictionary を削除する処理が必要になりますが、この辺りは省略します。
追記
動的に追加、削除されるようなスタイルを使う場合には DynamicResource を使わないと反映されません。StaticResource と DynamicResource の使い分けは結構重要ですね。
参考 : リソースの概要 - 静的リソースと動的リソース

*1:ここでは Application.Resources.MergedDictionaries