win8开发(4)——保存/读取本地应用程序设置

启动VS,打开“对象浏览器”,我们来找一个东西。
在“对象浏览器”中找到Windows.Storage命名空间,并注意以下几个类。

1.png 

其中,我们要注意ApplicationData,看看它这名字,你也能猜到它是干哪行的。很明显,

它一定与读写应用程序设置有关。

嗯,猜得没错,ApplicationData有一个静态属性——Current,不用多解释,指的自然是

我们当前运行的应用程序。因此,我们就知道,要得到当前应用程序的ApplicationData,

就通过该属性。

好的,第一个问题解决,现在看第二个问题:如何保存应用程序设置?如何读取?其实这

是一个问题,知道了如何保存,自然就知道如何读取了。

再看看LocalSettings属性,它返回一个ApplicationDataContainer类的实例,这是一个

容器,而且,一个应用程序的本地设置中,还可以包括N个容器,但每个应用程序也会

带有一个容器,所以,如果我们只是存取简单的设置,不需要创建容器,就利用默认的

设置容器即可。

ApplicationDataContainer类有个Values属性,它返回一个IPropertySet接口,侈顺着“

对象浏览器”就能找到,它其实就是一个字典(Key - Value),所以说,“对象浏览器”

非常有用,把它用好了,能为我们解决许多问题。

1.png 

我相信,如果你的编程基础修练得扎实的话,你不用往下看了,现在,你已经知道如

何读写应用程序设置信息了。

应用程序设置用来干吗?呵呵,这个不难理解,比如,我们的应用程序会提供一个“

设置”页面,让用户按照他的习惯进行设置,如用户选择了哪一套皮肤,或者他设置

某页面的数据,默认显示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、现在,我们来运行一下。
运行,在右边的列表中,随便选择一项,这时候,设置信息已保存。
1.png 

回到VS,在工具栏中的“调试位置”中,将程序“挂起并结束”。

2.png 

等待应用程序结束后,我们再重新运行。这时候你会看到,ListBox当前选择的项索引就是我们刚才保存的索引值。
这样,我们就达到读写设置的目的了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章