web-dev-qa-db-ja.com

WPF dotnetコアのUserSettings / ApplicationSettingsに相当

.Net Core> = 3.0のWPFアプリケーションのユーザー設定を永続化するために推奨される方法は何ですか?

作成されたWPF .Net Core 3.0プロジェクト(VS2019 V16.3.1)これで、Properties.Settingsセクションがなくなったことがわかりました。

SolutionExplorer

オンライン検索の後、Microsoft.Extensions.Configurationに飛び込み始めました。

設定にアクセスするための肥大化したコードの横に、さらに悪いことに->保存しない?
。NET Coreのユーザー構成設定

幸いにも、残念ながら、Microsoft.Extensions.Configurationは、設計による保存をサポートしていません。このGithubの問題について詳しく読む ConfigurationProviderに保存がない理由


.Net Core> = 3.0のWPFアプリケーションのユーザー設定を永続化するために推奨される(そして簡単/高速/シンプル)方法は何ですか?


_<= .Net 4.8_以前は、次のように簡単でした。

  • プロパティに変数を追加します。 User Settings

  • 起動時に変数を読み取る
    var culture = new CultureInfo(Properties.Settings.Default.LanguageSettings);

  • 変数が変更されたとき->すぐに保存
    Properties.Settings.Default.LanguageSettings = selected.TwoLetterISOLanguageName; Properties.Settings.Default.Save();

33
MarkusEgle

Wpf Net.Coreの場合

プロジェクトマウスの右ボタンをクリック->新しい項目の追加->設定ファイル(一般)

使用する

Settings1.Default.Height = this.Height;
Settings1.Default.Width = this.Width;

this.Height = Settings1.Default.Height;
this.Width = Settings1.Default.Width;

Settings1.Default.Save();

「Settings1」がファイル名を作成した場所

[〜#〜]例[〜#〜]

'Settings1.settings'ファイルをダブルクリックして編集します

private void MainWindowRoot_SourceInitialized(object sender, EventArgs e)
{
    this.Top = Settings1.Default.Top;
    this.Left = Settings1.Default.Left;
    this.Height = Settings1.Default.Height;
    this.Width = Settings1.Default.Width;
    // Very quick and dirty - but it does the job
    if (Settings1.Default.Maximized)
    {
        WindowState = WindowState.Maximized;
    }
}

private void MainWindowRoot_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (WindowState == WindowState.Maximized)
    {
        // Use the RestoreBounds as the current values will be 0, 0 and the size of the screen
        Settings1.Default.Top = RestoreBounds.Top;
        Settings1.Default.Left = RestoreBounds.Left;
        Settings1.Default.Height = RestoreBounds.Height;
        Settings1.Default.Width = RestoreBounds.Width;
        Settings1.Default.Maximized = true;
    }
    else
    {
        Settings1.Default.Top = this.Top;
        Settings1.Default.Left = this.Left;
        Settings1.Default.Height = this.Height;
        Settings1.Default.Width = this.Width;
        Settings1.Default.Maximized = false;
    }

    Settings1.Default.Save();
}
0
mdimai666