Файл настроек приложения WPF - PullRequest
1 голос
/ 24 февраля 2010

Я пишу приложение WPF с C # в качестве кода и хочу дать пользователям возможность изменять определенные настройки в моем приложении. Существует ли стандарт для хранения настроек в приложении, которые будут постоянно считываться и записываться?

Ответы [ 3 ]

3 голосов
/ 24 февраля 2010

Несмотря на то, что в файл app.config можно записать (используя ConfigurationManager.OpenExeConfiguration, чтобы открыть для записи), обычная практика - хранить там настройки только для чтения.

Легко написать простой класс настроек:

public sealed class Settings
{
    private readonly string _filename;
    private readonly XmlDocument _doc = new XmlDocument();

    private const string emptyFile =
        @"<?xml version=""1.0"" encoding=""utf-8"" ?>
          <configuration>
              <appSettings>
                  <add key=""defaultkey"" value=""123"" />
                  <add key=""anotherkey"" value=""abc"" />
              </appSettings>
          </configuration>";

    public Settings(string path, string filename)
    {
        // strip any trailing backslashes...
        while (path.Length > 0 && path.EndsWith("\\"))
        {
            path = path.Remove(path.Length - 1, 1);
        }

        _filename = Path.Combine(path, filename);

        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        if (!File.Exists(_filename))
        {
            // Create it...
            _doc.LoadXml(emptyFile);
            _doc.Save(_filename);
        }
        else
        {
            _doc.Load(_filename);
        }

    }

    /// <summary>
    /// Retrieve a value by name.
    /// Returns the supplied DefaultValue if not found.
    /// </summary>
    public string Get(string key, string defaultValue)
    {
        XmlNode node = _doc.SelectSingleNode("configuration/appSettings/add[@key='" + key + "']");

        if (node == null)
        {
            return defaultValue;
        }
        return node.Attributes["value"].Value ?? defaultValue;
    }

    /// <summary>
    /// Write a config value by key
    /// </summary>
    public void Set(string key, string value)
    {
        XmlNode node = _doc.SelectSingleNode("configuration/appSettings/add[@key='" + key + "']");

        if (node != null)
        {
            node.Attributes["value"].Value = value;

            _doc.Save(_filename);
        }
    }

}
0 голосов
/ 24 февраля 2010

Вы можете попробовать раздел ресурсов окна \ страницы на XAML.

0 голосов
/ 24 февраля 2010

используйте ConfigurationSection класс для хранения / получения настроек из файла конфигурации

см .: Как: создать пользовательские разделы конфигурации с помощью ConfigurationSection

public class ColorElement : ConfigurationElement
    {
        [ConfigurationProperty("background", DefaultValue = "FFFFFF", IsRequired = true)]
        [StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\GHIJKLMNOPQRSTUVWXYZ", MinLength = 6, MaxLength = 6)]
        public String Background
        {
            get
            {
                return (String)this["background"];
            }
            set
            {
                this["background"] = value;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...