LoginSignup
2
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-23

はじめに

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

問題

本当はこう(Dark)なのに
image.png
それがこうなる(一番左のListBoxが黒文字)
image.png

Lightの場合本当はこうなるはず
image.png
それがこうなる(罫線が見えない(白い?))
image.png

解決

以前の記事で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);
    }
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2