web-dev-qa-db-fra.com

Équivalent à UserSettings / ApplicationSettings dans WPF dotnet core

Quelle est la méthode préférée pour conserver les paramètres utilisateur pour les applications WPF avec .Net Core> = 3.0?

Création du projet WPF .Net Core 3.0 (VS2019 V16.3.1) Maintenant, j'ai vu qu'il n'y avait plus de section Properties.Settings.

SolutionExplorer

Après la recherche en ligne, a commencé à plonger dans Microsoft.Extensions.Configuration.

À côté du code gonflé pour accéder aux paramètres, maintenant encore pire -> Pas de sauvegarde?
Paramètres de configuration utilisateur dans .NET Core

Heureusement ou malheureusement, Microsoft.Extensions.Configuration ne prend pas en charge l'enregistrement par conception. En savoir plus dans ce problème Github Pourquoi il n'y a pas de sauvegarde dans ConfigurationProvider?


Quelle est la méthode préférée (et facile/rapide/simple) pour conserver les paramètres utilisateur pour les applications WPF avec .Net Core> = 3.0?


Avant <= .Net 4.8, C'était aussi simple que:

  • ajoutez les variables aux propriétés. User Settings

  • Lire les variables au démarrage
    var culture = new CultureInfo(Properties.Settings.Default.LanguageSettings);

  • lorsqu'une variable change -> l'enregistrer immédiatement
    Properties.Settings.Default.LanguageSettings = selected.TwoLetterISOLanguageName; Properties.Settings.Default.Save();

33
MarkusEgle

Pour Wpf Net.Core

Projet cliquez sur le bouton droit de la souris -> Ajouter un nouvel élément -> Fichier de paramètres (général)

Utilisation

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

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

Settings1.Default.Save();

Où 'Settings1' a créé le nom du fichier

[~ # ~] exemple [~ # ~]

Double-cliquez sur le fichier 'Settings1.settings' et éditez

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