日期:2014-05-17 浏览次数:20694 次
启动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方法判断一下