WPFでMahAppsとMaterialDesignを使用しているとDark, Lightモードで表示がうまくいかなくなる


はじめに

以前MahAppsでカラー設定の保存と利用という記事を書きましたが、そこでテーマをDarkモードにした場合、文字が白抜きになるのはずなのですが、コントロールによって黒文字のままだったり、白背景に白文字という現象が起きました。

問題

本当はこう(Dark)なのに

それがこうなる(一番左のListBoxが黒文字)

Lightの場合本当はこうなるはず

それがこうなる(罫線が見えない(白い?))

解決

以前の記事でSetThemeAndColorを呼び出していましたが、その前に以下のようにApplyBaseThemeを呼び出して設定するとうまくいきました。

using MaterialDesignThemes.Wpf;

private readonly PaletteHelper _paletteHelper = new PaletteHelper();

public void ApplyBaseTheme(bool isDark)
{
    ITheme theme = _paletteHelper.GetTheme();
    IBaseTheme baseTheme = isDark ? new MaterialDesignDarkTheme() : (IBaseTheme)new MaterialDesignLightTheme();
    theme.SetBaseTheme(baseTheme);
    _paletteHelper.SetTheme(theme);
}

MaterialDesign側のテーマ設定を先に行って、それから通常のテーマ設定をするとうまくカラーが設定できるようです。
こんな感じです

    private void ApplyBase(bool isDark)
    {
        // ApplyBaseThemeを行う
        _materialDesignColorService.ApplyBaseTheme(isDark);

        // SetThemeAndColorを行う
        OnSetTheme(isDark);

        // カラーを保存
        _materialDesignColorService.SaveMaterialDesignColors();
    }

    private void OnSetTheme(bool isDark)
    {
        AppTheme apptheme; //AppTheme:enum Dark, Light
        if (isDark)
        {
            apptheme = (AppTheme)Enum.Parse(typeof(AppTheme), "Dark");
        }
        else
        {
            apptheme = (AppTheme)Enum.Parse(typeof(AppTheme), "Light");
        }

        _themeSelectorService.SetThemeAndColor(apptheme, SelectedWindowColor.Value);
    }