私のUIは一連のスタイルによって定義されています。
ユーザーに2つのスタイルファミリーから選択してもらいたいと思います。
コードビハインドでグローバルスタイルを交換するにはどうすればよいですか?
私のUIは一連のスタイルによって定義されています。
ユーザーに2つのスタイルファミリーから選択してもらいたいと思います。
コードビハインドでグローバルスタイルを交換するにはどうすればよいですか?
次の記事が役立つかもしれません:
一般に、実行時に、おそらく別のアセンブリからの新しいリソースに置き換え、App.Resources.MergedDictionaries
リストのレベルでテンプレートを再適用する必要があります。スタイルの割り当てMainWindow
を必ず設定してDynamicResource
ください。次のアルゴリズムが役立つ場合があります。
App.Resources.MergedDictionaries
App.Resources.MergedDictionaries
新しいセットで埋めるResourceDictionary
mainWindow.ApplyTemplate();
お役に立てれば。
リソースがまだ定義されていない別のリソースを参照しようとしないように、依存関係に細心の注意を払ってください。何がいつロードされるかを確認するには、マージされた辞書のセクションを参照してください。また、アプリケーションリソースを新しいマージされたディクショナリにリセットするとクリアされるため、すべてのリソースをApp.xamlから汎用リソースディクショナリに移動する必要があります。
更新は要素が再作成されたときにのみ有効になるように見えるため、変更を適用するにはナビゲーションが必要です。
private void LoadStyles(StyleType styleType)
{
ResourceDictionary merged = new ResourceDictionary();
ResourceDictionary generic = new ResourceDictionary();
ResourceDictionary theme = new ResourceDictionary();
generic.Source = new Uri("ms-appx:/Common/StandardStyles.xaml");
switch (styleType)
{
default:
case StyleType.Custom1: { theme.Source = new Uri("ms-appx:/Common/AppStyles-Custom1.xaml"); break; }
case StyleType.Custom2: { theme.Source = new Uri("ms-appx:/Common/AppStyles-Custom2.xaml"); break; }
case StyleType.Custom3: { theme.Source = new Uri("ms-appx:/Common/AppStyles-Custom3.xaml"); break; }
}
merged.MergedDictionaries.Add(generic);
merged.MergedDictionaries.Add(theme);
App.Current.Resources = merged;
//this.ApplyTemplate(); <- doesn't seem to reapply resources to layout tree
}