aonim
@aonim (minoa)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

WPF Themeの表示問題

Q&A

Closed

解決したいこと

このような画面を作成して、themeファイルを使いました。
設計画面で見る時、問題ないですが、実行すれと、スタイルが全部表示されなかったです。
設計画面のスタイル通り、表示したいです。

設計画面
image.png

実行画面
image.png

該当するソースコード

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../Themes/BureauBlue.xaml"/>
                <ResourceDictionary>
                    <local:Enum2BooleanConverter x:Key="Enum2BooleanConverter"/>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

自分で試したこと

リビルト、プログラム再起動、.vsファイルとobjフォルダの削除を試して、
解決できませんでした。

この現状が発生する可能な原因は何ですか。

0

3Answer

原因がわかりました。
langRd = Application.LoadComponent(new Uri(langFile, UriKind.Relative)) as ResourceDictionary;
言語設定の影響です。

解決方法がまたわかりません。
スタイルと言語両方を実現したいです。

0Like

解決できました!ちょっと整理して、コードをここに貼り付けます!

0Like

最初言語を切り替える時、一回すべてのリソースディレクトリをクリアしたので、xaml画面で使ったスタイルファイルもクリアされました。

            try
            {
                langRd = Application.LoadComponent(new Uri(langFile, UriKind.Relative)) as ResourceDictionary;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            if (langRd != null)
            {
                if (w.Resources.MergedDictionaries.Count > 0)
                {
                    //w.Resources.MergedDictionaries.Clear();
                    // ここでクリアしなくて、ディレクトリ配列の0番を言語に設定すれば、うまく実行できます
                    w.Resources.MergedDictionaries[0] = langRd;
                }
                else
                {
                    w.Resources.MergedDictionaries.Add(langRd);
                }
            }
0Like

Your answer might help someone💌