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

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

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

雖說這是一個非常簡單的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