页面的状态 和上一章讲的 应用程序的状态类似。直接上例子。
我们新建一个项目 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
(写的不好 请见谅,有不对请留言告知我,免得误人子弟。)