源碼下載:http://yunpan.cn/cFwwrT4V5rHIM  访问密码 1b97

在上一篇博客中,我已經說明了為什麼要自己寫一個PageLoader。原因就是,Frame的GoBack只是簡單的重新加載一個頁面,並不會保存原來的頁面的狀態。

怎麼樣才能保存原來的頁面狀態呢?只要原來的Frame不刪除,不就可以保存原來的狀態了嗎?所以實現起來就簡單多了,每Navigate一個頁面,我們就生成一個Frame,添加到Grid中,當Back時,我們就把這個Frame刪除掉。這樣就可以達到我們的目的了。

為了保證我們新加的Frame一定顯示在最前面,所以我們可以強制把ZIndex++,即每添加一個Frame,它的ZIndex都遞增。

而且因為是用了Add、Delete,我們就可以系統主題動畫了。

 public void Init (Grid root)
{
root_ = root; if (root_.ChildrenTransitions == null)
{
TransitionCollection trans = new TransitionCollection()
{
new AddDeleteThemeTransition() { }
};
root_.ChildrenTransitions = trans;
}
else
{
root_.ChildrenTransitions.Add(new AddDeleteThemeTransition());
}
}

PageLoader的源碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Animation; namespace NavigateProj
{
public class PageLoader
{
private class PageInfo
{
public Type PageType { get; set; }
public Frame PageFrame { get; set; } public object PageParam{ get; set; } public bool Load()
{
return PageFrame.Navigate(PageType, PageParam);
}
} private static PageLoader self_ = null;
private Grid root_ = null;
private Stack<PageInfo> pages_ = new Stack<PageInfo>();
private int zindex_ = ; private PageLoader() { } public static PageLoader Instance
{
get
{
if (self_ == null)
{
self_ = new PageLoader();
}
return self_;
}
} public void Init (Grid root)
{
root_ = root; if (root_.ChildrenTransitions == null)
{
TransitionCollection trans = new TransitionCollection()
{
new AddDeleteThemeTransition() { }
};
root_.ChildrenTransitions = trans;
}
else
{
root_.ChildrenTransitions.Add(new AddDeleteThemeTransition());
}
} public bool LoadPage (Type pageType, object param = null)
{
if (root_ == null) return false; PageInfo newPageInfo = new PageInfo()
{
PageType = pageType,
PageFrame = new Frame(),
PageParam = param,
}; // ZIndex 保證在最前面
Canvas.SetZIndex(newPageInfo.PageFrame, zindex_); if (!newPageInfo.Load())
{
return false;
} root_.Children.Add(newPageInfo.PageFrame);
++zindex_;
pages_.Push(newPageInfo);
return true;
} public bool Back ()
{
if (pages_.Count <= ) return false; var page = pages_.Pop();
root_.Children.Remove(page.PageFrame);
--zindex_; var currPage = pages_.Peek();
return true;
}
}
}

【WIN10】使用自己的PageLoader加載Page的更多相关文章

  1. 容器加載Web工程的Web.xml文件介紹

    转 容器加載Web工程的Web.xml文件介紹 [-] 这篇文章主要是综合网上关于webxml的一些介绍希望对大家有所帮助也欢迎大家一起讨论 ---题记 一            Webxml详解 一 ...

  2. Jquery easy ui datagrid動態加載列問題

    1.如下图效果是当选择不同的日期范围时datagrid则会加载出对应的列数

  3. jquery 加載

    load(url,data,callback)從遠程服務器加載數據,并放入到被選中元素上: url是必須有的,希望加載的url: data是可選的,表示和請求一起發送的鍵值對數據: callback是 ...

  4. Windows Store App下代码加载page resource和resw文件里的string

    加载page resource 在page的code behind里: this.Resources["textBoxStyle"] 加载resw文件里的string: Resou ...

  5. [Win10] 安装虚拟光驱 用于加载ISO等镜像文件

    百度上找到UltraISO安装 一般来说安装到这就基本会显示一个 若经过上述步骤仍没出现虚拟光驱,则尝试进行加载ISO镜像文件到虚拟光驱然后再看看 这样基本就大功告成了~

  6. Magento2-2.3.4 win10安装完magento无法加载静态资源导致无法进入后台登录页面

    后台面无法进入,截图如下

  7. Ubuntu軟件商店加載失敗的解決方法

    Ubuntu軟件商店有的时候加载不出来,先用下面的试试 sudo apt install python-apt 如果不行,继续下面的方法 打开终端,运行下面的命令: sudo apt-get upda ...

  8. 【WIN10】我的第一個WIN10-UWP應用——古文觀止

    已上架,下載地址:https://www.microsoft.com/store/apps/9nblggh6cc32 特點是:繁體豎排,隱藏/顯示標點符號. 截幾張圖來瞅瞅. 1.主界面 這張圖使用的 ...

  9. 【WIN10】基本控件

    先發個下載地址: http://yunpan.cn/cHuCqYzvsWFAL  访问密码 3470 說明一下.這個示例只是最簡單的演示,並不能提供太大的實用價值. 後面會介紹 Bing & ...

随机推荐

  1. HDU 4825 Xor Sum (裸字典树+二进制异或)

    题目链接 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将 ...

  2. 南京邮电大学CTF密码学部分Writeup

    异性相吸 1.xor 2.hex2binary 3.len(bin(miwen))==len(bin(mingwen)) # -*- coding:utf-8 -*- file_de = open(' ...

  3. Mysql注入root权限直接写一句话马

    首先我们的找到一个有注入的站:这里我用自己搭建的环境表示:大家不要乱来 http://localhost/pentest/sql/sql_injection_get.php?id=1 发现是root权 ...

  4. 41 - 数据库-pymysql41 - 数据库-pymysql-DBUtils

    目录 1 Python操作数据库 2 安装模块 3 基本使用 3.1 创建一个连接 3.2 连接数据库 3.3 游标 3.3.1 利用游标操作数据库 3.3.2 事务管理 3.3.3 执行SQL语句 ...

  5. linux中core dump开启使用教程【转】

    转自:http://www.111cn.net/sys/linux/67291.htm 一.什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各 ...

  6. 美国部分科技公司创始及IPO信息

    作者:Ben.Z 时间:2018-04-19 做这份统计表格的目的是为了更好地了解当下美国的IT发展,搞清楚那些耳熟能详的名词的来源. 原文是用WPS统计的,本文仅展示截图. 创始人年龄分析: 1.上 ...

  7. Codeforces 225C Barcode(矩阵上DP)

    题目链接:http://codeforces.com/contest/225/problem/C 题目大意: 给出一个矩阵,只有两种字符'.'和'#',问最少修改多少个点才能让每一列的字符一致,且字符 ...

  8. JS验证表单中TEXT文本框中是否含有非法字符

    <form id="form" action="" method="post"> <input type="hi ...

  9. HA下的Spark集群工作原理解密

    实验环境: zookeeper-3.4.6 Spark:1.6.0 简介: 本篇博客将从以下几点组织文章: 一:Spark 构建高可用HA架构 二:动手实战构建高可用HA 三:提交程序测试HA 一:S ...

  10. Excel根据单元格内容设置整行颜色

    1. 选择需要设置的区域,条件格式中找到“新建规则” 2. 弹出窗口中选择“使用公式确定要设置格式的单元格”一项.填写公式如下: =IF(OR($D1="已完成",$D1=&quo ...