• 微软原版系统

  • 一键重装系统

  • 纯净系统

  • 在线技术客服

魔法猪系统重装大师 一键在线制作启动 U 盘 PE 系统 用一键重装的魔法拯救失去灵魂的系统
当前位置:首页 > 教程 > 电脑教程

WP7浏览器控件WebBrowser历史记录、前进、后退、刷新功能实现

时间:2015年04月02日 15:22:36    来源:魔法猪系统重装大师官网    人气:11222

由于要在应用程序内部访问网页,不跳出应用。所以要实现一个浏览器。但是悲催的事windows phone8 的WebBrowser控件已经支持了像CanGoBack ,CanGoForward,GoBack,GoForward等这些功能,但是wp7没有就实现了几个前进后退几个功能。用在page里面也很简单,实现的效果如下图所示。

因为使用十分简单。和windows phone8上的WebBrowser一样的。我就直接给控件的代码,就帖使用的代码了。

代码如下,注释也都写的比较清楚。

using System;

using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Windows.Markup;
using System.Text.RegularExpressions;
using Microsoft.Phone.Tasks;
using System.Collections.Generic;
using System.Windows.Navigation;

namespace Controls.HcControl
{
    public class HcWebView : Control
    {
        /// 
        /// Gets the ControlTemplate string for the control.
        /// 
        /// 
        /// Not in generic.xaml so the implementation of HcWebView can be entirely in this file.
        /// 
        private static string TemplateString
        {
            get
            {
                return
                    "" +
                        "" +
                            "" +
                        "" +
                    "";
            }
        }

        //----------对象的内部成员
        #region Member

        /// 
        /// WebBrowser.
        /// 
        private WebBrowser _webBrowser;

        /// 
        /// 历史Uri记录堆栈
        /// 
        private List _historyStack;

        /// 
        /// 历史记录堆栈索引
        /// 
        private int _historyStackIndex;

        /// 
        /// 导航到的Uri是否来自历史堆栈
        /// 
        private bool _fromHistory;

        private bool canGoBack;
        /// 
        /// 获取一个值,该值指示 WebBrowser 是否可以在浏览历史记录中向前导航一个页面。
        /// 
        public bool CanGoBack
        {
            get
            {
                return (_historyStackIndex > 1);
            }
            internal set
            {
                canGoBack = value;
            }
        }

        private bool canGoForward;
        /// 
        /// 获取一个值,该值指示 WebBrowser 是否可以在浏览历史记录中向前导航一个页面。
        /// 
        public bool CanGoForward 
        {
            get
            {
                return (_historyStackIndex < _historyStack.Count);
            }
            internal set
            {
                canGoForward = value;
            }
        }

        #endregion
        
        //----------对象的生命周期
        #region LifeCycle

        /// 
        /// Initializes a new instance of the HcWebView class.
        /// 
        public HcWebView()
        {
            this._historyStack = new List();
            this._historyStackIndex = 0;
            this._fromHistory = false;

            this.Template = (ControlTemplate)XamlReader.Load(TemplateString);
        }
        
        /// 
        /// Invoked when a new Template is applied.
        /// 
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            if (_webBrowser != null)
            {
                _webBrowser.LoadCompleted -= OnLoadCompleted;
                _webBrowser.Navigated -= OnNavigated;
                _webBrowser.Navigating -= OnNavigating;
                _webBrowser.NavigationFailed -= OnNavigationFailed;
                _webBrowser.ScriptNotify -= OnScriptNotify;
            }


            _webBrowser = GetTemplateChild("WebBrowser") as WebBrowser;


            if (_webBrowser != null)
            {
                _webBrowser.LoadCompleted += OnLoadCompleted;
                _webBrowser.Navigated += OnNavigated;
                _webBrowser.Navigating += OnNavigating;
                _webBrowser.NavigationFailed += OnNavigationFailed;
                _webBrowser.ScriptNotify += OnScriptNotify;
            }
        }

        #endregion

        //----------对象响应的事件
        #region Events

        /// 
        /// 在 WebBrowser 控件已加载内容之后引发的事件。
        /// 
        public event LoadCompletedEventHandler LoadCompleted;
        private void OnLoadCompleted(object sender, NavigationEventArgs e)
        {
            if (LoadCompleted != null)
            {
                LoadCompleted(this, e);
            }
        }

        /// 
        /// 在 WebBrowser 控件成功导航之后引发的事件。
        /// 
        public event EventHandler Navigated;
        private void OnNavigated(object sender, NavigationEventArgs e)
        {
            if (!_fromHistory)
            {
                if (_historyStackIndex < _historyStack.Count)
                {
                    _historyStack.RemoveRange(_historyStackIndex, _historyStack.Count - _historyStackIndex);
                }
                _historyStack.Add(e.Uri);
                _historyStackIndex += 1;
            }
            _fromHistory = false;
            if (Navigated != null)
            {
                Navigated(this, e);
            }
        }

        /// 
        /// 当浏览器控件正在导航(包括从重定向)时引发的事件。
        /// 
        public event EventHandler Navigating;
        private void OnNavigating(object sender, NavigatingEventArgs e)
        {
            if (Navigating != null)
            {
                Navigating(this, e);
            }
        }

        /// 
        /// 在 WebBrowser 控件导航失败之后引发的事件。
        /// 
        public event NavigationFailedEventHandler NavigationFailed;
        private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            if (NavigationFailed != null)
            {
                NavigationFailed(this, e);
            }
        }

        /// 
        /// 当 Javascript 调用 window.external.notify() 时引发的事件
        /// 
        public event EventHandler ScriptNotify;
        private void OnScriptNotify(object sender, NotifyEventArgs e)
        {
            if (ScriptNotify != null)
            {
                ScriptNotify(this, e);
            }
        }

        #endregion

        //----------对象的内部函数
        #region Methods

        /// 
        /// WebBrowser 在浏览历史记录中向后导航一个页面。
        /// 
        public void GoBack()
        {
            if (_historyStackIndex > 1)
            {
                _historyStackIndex -= 1;
                _fromHistory = true;
                _webBrowser.Navigate(_historyStack[_historyStackIndex - 1]);
            }
        }

        /// 
        ///  WebBrowser 在浏览历史记录中向前导航一个页面。
        /// 
        public void GoForward()
        {
            if (_historyStackIndex < _historyStack.Count)
            {
                _historyStackIndex += 1;
                _fromHistory = true;
                _webBrowser.Navigate(_historyStack[_historyStackIndex - 1]);
            }
        }

        /// 
        /// Refresh HcWebView
        /// 
        public void RefreshWebView()
        {
            if ((this._webBrowser) != null && (this._webBrowser.Source != null))
            {
                this._webBrowser.Source = new Uri(this._webBrowser.Source.ToString());
            }
        }

        /// 
        /// 应用程序启动“Web 浏览器”应用程序。
        /// 
        public void ShowWebBrowser()
        {
            WebBrowserTask webTask = new WebBrowserTask();
            if ( (this._webBrowser) != null && (this._webBrowser.Source != null))
            {
                webTask.Uri = this._webBrowser.Source;
            }
            webTask.Show();
        }

        #endregion

        //----------对象的依赖属性
        #region DependencyProperty

        #region Source DependencyProperty

        /// 
        /// Gets or sets the Source.
        /// 
        public Uri Source
        {
            get { return (Uri)GetValue(SourceProperty); }
            set { SetValue(SourceProperty, value); }
        }

        /// 
        /// Identifies the Source dependency property.
        /// 
        public static readonly DependencyProperty SourceProperty =
            DependencyProperty.Register("Title", typeof(Uri), typeof(HcWebView), new PropertyMetadata(null, new PropertyChangedCallback(OnSourceChanged)));

        /// 
        /// Prevents the webWiew Source from transitioning into a Semiexpanded or Collapsed visual state if the Source is not set.
        /// 
        /// The dependency object.
        /// The event information.
        private static void OnSourceChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            HcWebView webView = (HcWebView)obj;

            if (e.NewValue != null)
            {
                webView._webBrowser.Source = e.NewValue as Uri;
            }
        }

        #endregion

        #endregion
    }
}
WP7,浏览器,控件,WebBrowser,历史,记录,、,
栏目:电脑教程 阅读:1000 2023/12/27
Win7教程 更多>>
U盘教程 更多>>
Win10教程 更多>>
魔法猪学院 更多>>

Copyright © 2015-2023 魔法猪 魔法猪系统重装大师

本站发布的系统仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件。

在线客服 查看微信 返回顶部