老周的部落格專欄:http://blog.csdn.net/tcjiaan
轉載請註明原作者和出處。
啟動VS,開啟“物件瀏覽器”,我們來找一個東西。
在“物件瀏覽器”中找到Windows.Storage命名空間,並注意以下幾個類。
其中,我們要注意ApplicationData,看看它這名字,你也能猜到它是幹哪行的。很明顯,它一定與讀寫應用程式設定有關。
嗯,猜得沒錯,ApplicationData有一個靜態屬性——Current,不用多解釋,指的自然是我們當前啟動並執行應用程式。因此,我們就知道,要得到當前應用程式的ApplicationData,就通過該屬性。
好的,第一個問題解決,現在看第二個問題:如何儲存應用程式設定?如何讀取?其實這是一個問題,知道了如何儲存,自然就知道如何讀取了。
再看看LocalSettings屬性,它返回一個ApplicationDataContainer類的執行個體,這是一個容器,而且,一個應用程式的本地設定中,還可以包括N個容器,但每個應用程式也會帶有一個容器,所以,如果我們只是存取簡單的設定,不需要建立容器,就利用預設的設定容器即可。
ApplicationDataContainer類有個Values屬性,它返回一個IPropertySet介面,侈順著“物件瀏覽器”就能找到,它其實就是一個字典(Key - Value),所以說,“物件瀏覽器”非常有用,把它用好了,能為我們解決許多問題。
我相信,如果你的編程基礎修練得紮實的話,你不用往下看了,現在,你已經知道如何讀寫應用程式設定資訊了。
應用程式設定用來幹嗎?呵呵,這個不難理解,比如,我們的應用程式會提供一個“設定”頁面,讓使用者按照他的習慣進行設定,如使用者選擇了哪一套皮膚,或者他設定某頁面的資料,預設顯示15條還是30條。
設定資訊是比較簡單的資料,所以,我們就儲存到本地設定中即可。
還有,上面提到了設定資訊有容器,這個嘛,可以認為將設定資訊分組,就像我們在設定儲存區建立了檔案夾一樣。
也可以聯想一個註冊表,Windows系統的註冊表其實就是一個龐大的字典,它有鍵,每個鍵對應一個值,但我們知道,註冊表是分組的,就像我們硬碟中儲存的檔案夾和檔案一樣。
比如,註冊表的根會分為HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE等等。
下面,我們一起來做一個練習,這樣我們不只是停留在理論上,動手操作一下吧。
1、啟動VS,建立一個項(此處省略39個字)。
2、開啟MainPage.xaml,參考下面XAML代碼:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Margin="20" TextWrapping="Wrap"> <Span FontSize="36" Foreground="Pink" FontWeight="Black">樣本說明</Span> <LineBreak/> <Run FontSize="24"> 在右側的列表中選擇一項,然後掛起或退出應用程式;接著再運行應用程式。 </Run> <LineBreak/> <Run FontSize="24"> 在作出選擇後,將選擇項的索引儲存到設定中,當頁面初始化時,從設定中讀入之前挑選清單項的索引。 </Run> </TextBlock> <ListBox x:Name="MyListBox" FontSize="28" SelectionChanged="onSelectedChanged" Grid.Column="1"> <ListBoxItem>項目一</ListBoxItem> <ListBoxItem>項目二</ListBoxItem> <ListBoxItem>項目三</ListBoxItem> <ListBoxItem>項目四</ListBoxItem> <ListBoxItem>項目五</ListBoxItem> </ListBox> </Grid>
我相信不難理解,重點是ListBox,我們在其中隨意設定幾個項目,並綁定其SelectionChanged事件。
3、在SelectionChanged事件上右擊,從彈出的菜單中選擇“定位到事件處理常式”,這時候就轉到後台代碼檔案了。
4、我比較習慣用C#,所以,下面代碼為C#代碼。
private void onSelectedChanged(object sender, SelectionChangedEventArgs e) { ListBox lb = sender as ListBox; if (lb != null) { if (lb.SelectedIndex > -1) { ApplicationDataContainer myContainer = ApplicationData.Current.LocalSettings; myContainer.Values["index"] = lb.SelectedIndex; } } }
代碼是不複雜的,重點我們是看一下如何儲存設定。這裡,我們把當前選定項的索引儲存。
5、當應用程式導航到本頁面時,我們就從設定中讀出剛才儲存的索引,並把ListBox的選定項索引還原。
protected override void OnNavigatedTo(NavigationEventArgs e) { ApplicationDataContainer container = ApplicationData.Current.LocalSettings; if (container.Values.ContainsKey("index")) { this.MyListBox.SelectedIndex = (int)container.Values["index"]; } else { this.MyListBox.SelectedIndex = 0; } }
在讀出設定前,一定要通過ContainsKey方法判斷一下,要找的鍵是不是存在的,只有存在才將其值讀入。
6、現在,我們來運行一下。
運行,在右邊的列表中,隨便選擇一項,這時候,設定資訊已儲存。
回到VS,在工具列中的“調試位置”中,將程式“掛起並結束”。
等待應用程式結束後,我們再重新運行。這時候你會看到,ListBox當前選擇的項索引就是我們剛才儲存的索引值。
這樣,我們就達到讀寫設定的目的了。