1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Material Design Themes】設定を保存する

Posted at

はじめに

前回までに、Material Design Themesを使用しているアプリケーションで、テーマの変更とカラーの変更ができるユーザーコントロール作成の解説を行った。このままでは、切り替えたテーマやカラーの設定が保存されず、次回起動時にはデフォルトの状態に戻ってしまう。
設定の変更時に状態を保存して、次回起動時に保存した設定の状態で起動する方法を説明する。

前提条件

はじめにで紹介したユーザーコントロール作成の手順に沿ってアプリケーションを作成していることを前提としています。

設定ファイルの追加

ソリューションエクスプローラーのプロジェクトを右クリックして、プロパティを開いてください。
image.png
image.png

設定の項目を開いて、アプリケーションの設定を作成する/開くをクリックしてください。
image.png

すると、プロジェクトにProperties\Settings.settingsが追加されます。
その中身を以下のように設定してください。
image.png

App.xaml

スタートアップでBundledThemeを設定するので、App.xamlで設定不要です。

App.xaml
<Application
    x:Class="MaterialDesignApps.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MaterialDesignApps"
-   xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
    StartupUri="Views\MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
-               <materialDesign:BundledTheme BaseTheme="Light" PrimaryColor="Green" SecondaryColor="LightGreen" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign3.Defaults.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

App.xaml.cs

起動時に保存された設定を読み取るためOnStartupをオーバーライドします。

App.xaml.cs
using MaterialDesignApps.Helpers;
using MaterialDesignApps.Properties;
using MaterialDesignColors;
using MaterialDesignThemes.Wpf;
using System.Windows;

namespace MaterialDesignApps;

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        try
        {
            BaseTheme theme = Enum.Parse<BaseTheme>(Settings.Default.Theme);
            PrimaryColor primary = Enum.Parse<PrimaryColor>(Settings.Default.Primary);
            SecondaryColor secondary = Enum.Parse<SecondaryColor>(Settings.Default.Secondary);
            ThemeHelper.SetBundledTheme(theme, primary, secondary);
        }
        catch
        {
            BaseTheme theme = BaseTheme.Light;
            PrimaryColor primary = PrimaryColor.Orange;
            SecondaryColor secondary = SecondaryColor.Green;
            ThemeHelper.SetBundledTheme(theme, primary, secondary);
        }
        finally
        {
            base.OnStartup(e);
        }

    }
}

ThemeHelper.cs

設定を変更したときにその状態を保存するための記述を追加します。SetBundoledThemeを以下のように変更してください。

Helpers\ThemeHelper.cs
public static void SetBundledTheme(BundledTheme bundledTheme)
{
    Application.Current.Resources.MergedDictionaries.Add(bundledTheme);
    Settings.Default.Theme = bundledTheme.BaseTheme.ToString();
    Settings.Default.Primary = bundledTheme.PrimaryColor.ToString();
    Settings.Default.Secondary = bundledTheme.SecondaryColor.ToString();
    Settings.Default.Save();
}

起動

アプリを起動して動作を確認してください。

おわりに

この記事は備忘録として作成しました。
コードの使用によって生じるいかなる損害も、作者は一切責任を負いません。

1
4
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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?