您的位置:首页 > 其它

一天一天学 windows phone 引言 + 大概认知 之 保存恢复页面状态(八)

2013-09-01 12:53 295 查看
页面的状态 和上一章讲的 应用程序的状态类似。直接上例子。

我们新建一个项目 PhoneApp3. 然后在MainPage.xaml 页里面添加 一组 CheckBox控件如下:

<!--  ContentPanel - place additional content here  -->
        <Grid x:Name="ContentPanel"
              Grid.Row="1"
              Margin="12,0,12,0">
            <StackPanel>
                <CheckBox Name="lbi_apple"
                          Content="apple"
                          FontSize="40"
                          IsChecked="False" />
                <CheckBox Name="lbi_banana"
                          Content="banana"
                          FontSize="40"
                          IsChecked="False" />
                <CheckBox Name="lbi_orange"
                          Content="orange"
                          FontSize="40"
                          IsChecked="False" />
                <CheckBox Name="lbi_pear"
                          Content="pear"
                          FontSize="40"
                          IsChecked="False" />
                <CheckBox Name="lbi_mango"
                          Content="mango"
                          FontSize="40"
                          IsChecked="False" />
            </StackPanel>
        </Grid>



和上一章一样,因为找5以上应用比较麻烦,因此我们在项目上 "右键“ -> ”项目属性“ -> 左侧” 调试“选项卡 -> 勾上"在调试且停用时候执行逻辑删除" 如图



运行模拟器,任意选中几个CheckBox 然后点开始,到桌面导航页,再退回当前页,发现选中的 CheckBox 又成为未选中状态。

接下来我们继续完善代码页。添加代码如下:

//标识是否是第一次进入
        bool isNewPage = false;
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            isNewPage = true;
           
            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }


重写 OnNavigatedFrom 保存当前状态。代码如下:

protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
            //保存状态
            if (this.lbi_apple.IsChecked.HasValue)
            {
                State["apple"] = this.lbi_apple.IsChecked.Value;
            }
            if (this.lbi_banana.IsChecked.HasValue)
            {
                State["banana"] = this.lbi_banana.IsChecked.Value;
            }
            if (this.lbi_mango.IsChecked.HasValue)
            {
                State["mango"] = this.lbi_mango.IsChecked.Value;
            }
            if (this.lbi_orange.IsChecked.HasValue)
            {
                State["orange"] = this.lbi_orange.IsChecked.Value;
            }
            if (this.lbi_pear.IsChecked.HasValue)
            {
                State["pear"] = this.lbi_pear.IsChecked.Value;
            }
            
            
        }
重写 OnNavigatedTo 方法 用来恢复当前状态。代码如下:

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            //判断是否是第一次加载。如果是就不需要恢复状态。
            if (!isNewPage)
            {
                return;
            }           
            if (State.ContainsKey("apple"))
            {
                this.lbi_apple.IsChecked = (bool)State["apple"];
            }
            if (State.ContainsKey("banana"))
            {
                this.lbi_banana.IsChecked = (bool)State["banana"];
            }
            if (State.ContainsKey("mango"))
            {
                this.lbi_mango.IsChecked = (bool)State["mango"];
            }
            if (State.ContainsKey("orange"))
            {
                this.lbi_orange.IsChecked = (bool)State["orange"];
            }
            if (State.ContainsKey("pear"))
            {
                this.lbi_pear.IsChecked = (bool)State["pear"];
            }
            isNewPage = false;
        }
OK 重启运行模拟器,任意勾中几个选项,然后按开始回到桌面导航,再点后退回到当前页。之前选中 的状态被恢复了。

代码下载 地址 http://download.csdn.net/detail/gongkepop/6191607
(写的不好 请见谅,有不对请留言告知我,免得误人子弟。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: