私のプロジェクトでは、プロジェクト全体のすべての WPF ウィンドウに ProjectTheme.xaml ファイルを使用しています。ProjectTheme.xaml ファイルは、次のようにスタイル テーマを参照します。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<!-- In order to modify the project's theme, change this line -->
<ResourceDictionary Source="/MyProject;component/Themes/WPFThemes/Customized.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
すべての WPF ウィンドウは WindowBase.xaml を参照します
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyProject;component/View/WindowBase.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
WindowBase.xaml は、カスタマイズされたタイトルバー Bar1.xaml を参照します
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyProject;component/Themes/WPFThemes/Bar1.xaml" />
</ResourceDictionary.MergedDictionaries>
Bar1.xaml は ProjectTheme.xaml を参照します
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyProject;component/ProjectTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
したがって、ヒエラルキーは
- Window1 は WindowBase.xaml を参照します
- WindowBase は Bar1.xaml を参照します
- Bar1 は ProjectTheme.xaml を参照します
- ProjectTheme.xaml は、実際のテーマ リソース ファイルを参照します。
これはうまくいきます。アプリを終了せずに、実行時にプロジェクトのテーマを動的に変更したいと考えています。いくつかのテーマ スタイル ファイルがあるとします。
- カスタマイズされた.xaml
- カスタマイズされた1.xaml
- Customized2.xaml
私の質問は、実行時に ProjectTheme.xaml ファイルを動的に更新して行を変更できるかどうかです。
<ResourceDictionary Source="/MyProject;component/Themes/WPFThemes/Customized.xaml" />
に
<ResourceDictionary Source="/MyProject;component/Themes/WPFThemes/Customized1.xaml" />
私の目的を達成するには?はいの場合、どうすればよいですか?いいえの場合、その理由と、目的を達成するための最善の (他の) 方法は何ですか?
次のことを試しましたが、どれも機能しません: スタイルは変わりません。
方法1
Application.Current.Resources.MergedDictionaries.Clear();
Uri NewTheme = new Uri(@"/MyProject;component/Themes/WPFThemes/Customized2.xaml", UriKind.Relative);
ResourceDictionary dictionary = (ResourceDictionary)Application.LoadComponent(NewTheme);
Application.Current.Resources.MergedDictionaries.Add(dictionary);
方法 2
Application.Current.Resources.MergedDictionaries.RemoveAt(0);
Uri NewTheme = new Uri(@"/MyProject;component/Themes/WPFThemes/Customized2.xaml", UriKind.Relative);
ResourceDictionary dictionary = (ResourceDictionary)Application.LoadComponent(NewTheme);
Application.Current.Resources.MergedDictionaries.Insert(0, dictionary);
注: 実際のテーマ スタイル ファイル (Customized.xaml...) では、動的リソースと静的リソースを組み合わせて使用しました。それは重要ですか?
前もって感謝します。