zoukankan      html  css  js  c++  java
  • 【WIN10】使用自己的PageLoader加載Page

    源碼下載: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_ = 1;
    
            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 <= 1) return false;
    
                var page = pages_.Pop();
                root_.Children.Remove(page.PageFrame);
                --zindex_;
    
                var currPage = pages_.Peek();
                return true;
            }
        }
    }
  • 相关阅读:
    make[1]: *** [/workopenwrt/trunk/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/stamp/.tools_install_nnnnn] Error 2 make[1]: Leaving directory `/work/openwrt/trunk' make: *** [world]
    安卓端与开发板通信
    openwrt串口的使用
    .OpenWrt驱动程序Makefile的分析概述 、驱动程序代码参考、以及测试程序代码参考
    openwrt系统之字符设备驱动软件包加载、测试程序加载
    cc2530串口通信流程
    cc2530操作任务系统初始化分析
    总结OpenWrt系统基本操作方法
    Zigbee协议栈OSAL层API函数【转载】
    cc2530启动流程---广播发送数据
  • 原文地址:https://www.cnblogs.com/lin277541/p/4882000.html
Copyright © 2011-2022 走看看