【问题标题】:How to save my app settings?如何保存我的应用设置?
【发布时间】:2016-03-06 16:47:00
【问题描述】:

我在保存应用设置时遇到问题?我创建了 Windows 10 通用应用程序,并且我有 Slider 我想要保存的值。

我用这段代码来保存它:

private void musicVolume_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
    {
        ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;
        AppSettings.Values["musicV"] = musicVolume.Value;
    }

在页面的构造函数中,我有这行代码:

ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;

        if (AppSettings.Values.ContainsKey("musicV"))
        {
            musicVolume.Value = Convert.ToDouble(AppSettings.Values["musicV"]);
        }

当我转到该页面时它应该显示新值,但它没有,它总是显示最后一个默认值。 为什么它不起作用以及如何使它起作用?

PS:对不起我的英语不好......

【问题讨论】:

  • 尝试将这些值写入Settings.setting,因为无论您在何处构建代码,app.config 都会重置为默认设置。
  • 请参阅this page,了解如何在 Windows 10 通用应用中管理应用设置

标签: c# windows uwp


【解决方案1】:

而不是在构造函数中,通过订阅构造函数中的 Page Loaded 事件,在加载 Page 后执行 musicVolume.Value 初始化。 Loaded 事件是进行此类初始化的合适位置。

例如在构造函数中添加:

Loaded += Page_Loaded;

您的 Loaded 事件处理程序为:

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;

    if (AppSettings.Values.ContainsKey("musicV"))
    {
        musicVolume.Value = (double)AppSettings.Values["musicV"];
    }
}

【讨论】:

  • 感谢您的建议,但这种方式的实际好处是什么?
  • 在 Loaded 事件处理程序中,您知道控制元素(在您的情况下名为 musicVolume)已正确初始化。更多信息here.
【解决方案2】:

您可以尝试将您的设置封装到“SettingsManager”类中,如本文所述:https://stackoverflow.com/a/33754414/1694281

这样您就可以确保立即访问最后分配的值,而不会出现任何同步问题。 (你也可以对它进行绑定。)

【讨论】:

    【解决方案3】:

    最终我重写了 OnNavigatedFrom 方法:

     protected override void OnNavigatedFrom(NavigationEventArgs e)
     {
        ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings;
        AppSettings.Values["musicV"] = musicVolume.Value;
     }
    

    现在它会在您离开页面时保存设置,并且可以正常工作。我现在仍然不知道为什么我的答案中的方法不起作用。显然 ValueChanged 事件存在一些问题。

    @nhuau:您的解决方案看起来不错,但我是初学者,不知道如何将其应用于我的问题。但我会牢记这一点,并在将来的某个时候回来。

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 2017-03-14
      • 2017-12-10
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2013-11-01
      相关资源
      最近更新 更多