win8开发(4)——保存/读取本地应用程序设置
2012-12-04 13:40
239 查看
启动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当前选择的项索引就是我们刚才保存的索引值。 这样,我们就达到读写设置的目的了。 |
相关文章推荐
- win8应用商店程序开发-保存/读取本地应用程序设置
- 新时尚Windows8开发(4):保存/读取本地应用程序设置
- Windows8 Metro开发 (04) : 保存/读取本地应用程序设置
- Windows8应用开发2 保存读取本地应用程序设置
- Windows8 Metro开发 (04) : 保存/读取本地应用程序设置
- iOS开发——头像设置及本地沙盒保存,圆形头像显示
- 程序启动读取和关闭时保存应用程序设置(QSettings)
- 读取和保存应用程序设置
- 程序启动读取和关闭时保存应用程序设置(QSettings)
- 在本地hosts文件中设置主机头的方法(win7和win8不能直接保存)
- iOS开发,把网络页面保存到本地,再读取本地页面
- Android开发:Sqlite 3 本地保存数据是否可以在不同的app应用下相互读取
- 程序启动读取和关闭时保存应用程序设置(QSettings)
- 程序启动读取和关闭时保存应用程序设置(QSettings)
- 读取和保存应用程序设置
- IOS开发共享设置,通过iTunes允许上传本地文件
- Java从网络读取图片并保存至本地
- 在sklearn上读取人脸数据集保存图片到本地
- Cocoa Touch 入门记——《精通 iOS 开发》学习心得(4) [应用程序设置]
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)