はじめに
以前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);
}