Windows Phone 7 - 獨立存儲空間

openkk 12年前發布 | 24K 次閱讀 Windows Phone開發 移動開發 Windows Phone

在Android 里面我們要快速保存用戶的設置或者游戲進行的數據,我們通常全使用SharePreference 這個類來進行操作,另外Android 還提供了一系列繼承自SharePreference 的組件提供我們快速保存用戶的設置項。那么在Windows Phone 7 提供了什么樣的機制提供用戶快速保存數據呢?微軟使用了一個叫IsolatedStorageSettings 的類庫提供給開發人員快速的使用獨立存儲保存用戶數據的功能,但總體使用感覺來說沒有Android 使用的方便,另外Andriod 的類似這種數據存儲是暴露給用戶的,而Windows Phone 7 的這種存儲機制則是嚴格控制,我們開發人員也不知道其具體存放位置。本篇的學習筆記,我利用Android 的存儲特色使用Windows Phone 7 的 IsolatedStorageSettings 類模仿了一個類似 Android  存儲機制的DEMO,希望這個小DEMO能對你有所幫助,下面先給出效果圖:

Windows Phone 7 - 獨立存儲空間

首次進入頁面時,界面放置了一個 TextBlock 控件和一個導航的按鈕,點擊導航按鈕進入配置界面,如下圖:

Windows Phone 7 - 獨立存儲空間

如上圖,圖中有一系列組件,可以設置第一幅圖的TextBlock 的字體大小和字體需要顯示的顏色,選擇紅色并且改變字體大小為32,然后點擊Back 鍵退回來,顯示效果如下:

Windows Phone 7 - 獨立存儲空間

雖說這是一個非常簡單的DEMO,但Windows Phone 7的IsolatedStorageSettings 在這個DEMO中的使用是比較全面的,下面給出代碼示意:

首先,mainPage 界面的CS代碼

public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textColor))
            {
                int colorInt = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textColor].ToString());
                SolidColorBrush scb=null;
                switch (colorInt)
                {
                    case 0:
                         scb = new SolidColorBrush(Colors.White);
                        break;
                    case 1:
                         scb = new SolidColorBrush(Colors.Red);
                        break;
                    case 2:
                        scb = new SolidColorBrush(Colors.Green);
                        break;
                    case 3:
                        scb = new SolidColorBrush(Colors.Blue);
                        break;
                }
                setTextBlock.Foreground = scb;
            }if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textSize))
            {
                int textSize = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textSize].ToString());
                setTextBlock.FontSize = textSize;
            }
        }private void navigateionBtn_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri(“/Set.xaml“,UriKind.RelativeOrAbsolute));
        }

當界面加載時,讀取配置信息并修改TextBlock 對應的值。進入配置頁面時稍顯復雜,考慮到不需要用戶點確認就可以保存數據,這里使用的導航進來和導航出去兩種寫法,代碼如下:

public partial class Set : PhoneApplicationPage
    {int textColor;
        int textSize;
        public Set()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(Set_Loaded);
        }void Set_Loaded(object sender, RoutedEventArgs e)
        {
            switch (textColor)
            {
                case 0:
                    whiteRadioButton.IsChecked = true;
                    break;
                case 1:
                    redRadioButton.IsChecked = true;
                    break;
                case 2:
                    greenRadioButton.IsChecked = true;
                    break;
                case 3:
                    blueRadioButton.IsChecked = true;
                    break;
            }
            textSizeTextBox.Text = textSize.ToString();
        }private int colorInt = -1;
        protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
        {
            if (whiteRadioButton.IsChecked==true)
            {
                colorInt = 0;
            }
            else if (redRadioButton.IsChecked==true)
            {
                colorInt = 1;
            }
            else if (greenRadioButton.IsChecked==true)
            {
                colorInt = 2;
            }
            else if (blueRadioButton.IsChecked==true)
            {
                colorInt = 3;
            }= colorInt;= Int32.Parse(textSizeTextBox.Text);
            IsolatedStorageSettings.ApplicationSettings.Save();base.OnNavigatedFrom(e);
        }protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textColor))
            {
                 textColor = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textColor].ToString());
            }
            if (IsolatedStorageSettings.ApplicationSettings.Contains(App.textSize))
            {
                 textSize = Int32.Parse(IsolatedStorageSettings.ApplicationSettings[App.textSize].ToString());
            }
            base.OnNavigatedTo(e);
        }
    }

            IsolatedStorageSettings.ApplicationSettings[App.textColor] 

            IsolatedStorageSettings.ApplicationSettings[App.textSize] 

 

導航進來時,為變量賦值,并在加載完成后改變控件的內容和狀態,如上圖的TextBox 的文本值和RadioButton的選中項。

導航出去時,保存用戶的選擇行為。

Tip:IsolatedStorageSettings.ApplicationSettings 這個 Ditonary 的Value 是一個 Object ,亦就是您可以將你的一個Model 對象保存進來亦可,它內部會幫你序列化。

另外,如果你習慣使用IO流寫文件操作,下篇文章會講述到使用IO流寫文件的方式存儲空間的方法,希望 留意。

源碼下載:存儲空間DEMO

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!