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

页面的状态 和上一章讲的 应用程序的状态类似。直接上例子。

我们新建一个项目 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

(写的不好 请见谅,有不对请留言告知我,免得误人子弟。)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值