1

私のUIは一連のスタイルによって定義されています。

ユーザーに2つのスタイルファミリーから選択してもらいたいと思います。

コードビハインドでグローバルスタイルを交換するにはどうすればよいですか?

4

2 に答える 2

3

次の記事が役立つかもしれません:

一般に、実行時に、おそらく別のアセンブリからの新しいリソースに置き換え、App.Resources.MergedDictionariesリストのレベルでテンプレートを再適用する必要があります。スタイルの割り当てMainWindowを必ず設定してDynamicResourceください。次のアルゴリズムが役立つ場合があります。

  1. 綺麗App.Resources.MergedDictionaries
  2. App.Resources.MergedDictionaries新しいセットで埋めるResourceDictionary
  3. ウィンドウテンプレートを再適用しますmainWindow.ApplyTemplate();

お役に立てれば。

于 2012-12-06T08:38:43.183 に答える
3

リソースがまだ定義されていない別のリソースを参照しようとしないように、依存関係に細心の注意を払ってください。何がいつロードされるかを確認するには、マージされた辞書のセクションを参照してください。また、アプリケーションリソースを新しいマージされたディクショナリにリセットするとクリアされるため、すべてのリソースを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
}
于 2012-12-06T19:49:54.357 に答える