混合导航

今天完成了webbrowser html和page之间的导航。

1、创建history类,里面包含2个stack存储前进和后退地址。 html的地址为uri类型,page的地址就是page实例(这样保证只有唯一page的实例存在)。

2、在webbrowser loadcompleted或者frame导航时,把地址加到history里。

3、在实现前进后退功能时,从page导航到html或者html导航到page,要注意frame的操作。

类的实现如下:

 class History
    {
        public History(Frame frame, WebBrowser webbrowser)
        {
            backStack = new Stack<object>();
            forwardStack = new Stack<object>();

            m_frame = frame;
            m_nowType = null;
            m_webbrowser = webbrowser;

        }

        public void operatorNavigate( object previousType)
        {
            if (m_nowType is Uri)
            {
                if (previousType is Uri)
                {
                    m_webbrowser.Navigate((Uri)m_nowType);
                }
                else
                {
                    m_frame.Navigate(m_webbrowser);
                    m_webbrowser.Navigate((Uri)m_nowType);
                }

            }
            else
            {
                m_frame.Navigate(m_nowType);
            }

        }

        public bool GoBack()
        {
            if (CanGoback())
            {
                forwardStack.Push(m_nowType);
                m_nowType = backStack.Pop();
                operatorNavigate(forwardStack.Peek());
                return true;
            }
            return false;
        }

 

        public bool GoForward()
        {
            if (CanGoForward())
            {
                backStack.Push(m_nowType);
                m_nowType = forwardStack.Pop();
                operatorNavigate(backStack.Peek());

                return true;
            }
            return false;
        }


        public (object type)
        {
            if (m_nowType != null)
                backStack.Push(m_nowType);
            m_nowType = type;
            forwardStack.Clear();
        }

        public bool CanGoback()
        {
            if (backStack.Count > 0)
                return true;
            return false;
        }

        public bool CanGoForward()
        {
            if (forwardStack.Count > 0)
                return true;
            return false;
        }

 


        private Stack<object> backStack { get; set; }
        private Stack<object> forwardStack { get; set; }

        public object m_nowType { get; set; }
        private Frame m_frame;
        private WebBrowser m_webbrowser;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值