2015-12-02 50 views
4

我在保存我的應用程序設置時遇到問題?我創建的Windows 10通用應用程序,我有滑塊,這是我想要保存的價值。如何保存我的應用程序設置?

我使用此代碼保存它:

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

和頁的constuctor我有這個代碼行:

ApplicationDataContainer AppSettings = ApplicationData.Current.LocalSettings; 

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

它應該表現出新的價值,當我去到該頁面,但它不會,它總是顯示最後的默認值。 爲什麼它不工作,如何使它工作?

PS:對不起我的英文不好...

+1

試着寫這些值來'Settings.setting'因爲App.config中重置爲默認設置無論您在哪裏構建代碼。 – Irshad

+1

http://stackoverflow.com/questions/3032492/save-settings-in-a-net-winforms-application – Irshad

+0

請參閱[本頁](https://msdn.microsoft.com/zh-cn/library/windows /apps/mt299098.aspx)以瞭解如何在Windows 10通用應用程序中管理應用程序設置 – stuartd

回答

1

你可以嘗試封裝設置成在這篇文章中所描述的「設置管理」類,如:https://stackoverflow.com/a/33754414/1694281

就像你將來一定會立即有權訪問最後分配的值而沒有任何同步問題。 (而且你也可以用它做結合。)

1

最後我重寫OnNavigatedFrom方法:

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

現在,當您離開頁面,它的工作,它保存設置。我現在還不知道爲什麼我的答案中的方法不起作用。顯然,ValueChanged事件存在一些問題。

@nhuau:你的解決方案看起來不錯,但我是初學者,不知道如何將它應用於我的問題。但我會記住它,並在將來某個時候回到它。

6

而不是在構造函數中,通過在構造函數中訂閱頁面加載頁面後執行musicVolume.Value初始化。 加載的事件是做這種初始化的適當的地方。

例如,在構造函數中添加:

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"]; 
    } 
} 
+0

Thaks for advise,但這種方式的實際好處是什麼? – ja13

+2

在Loaded事件處理程序中,您知道控制元素(在您的情況下名稱爲musicVolume)已正確初始化。更多信息[在這裏](https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.frameworkelement.loaded)。 – user5525674

相關問題