|
原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-18-WebBrowser-Control.aspx
这一次我们将会讨论浏览器控件。
浏览器控件能干什么?
虽然不太明显,但是浏览器控件能够让你的用户查看特定的网页。但是他不是一个标准的浏览器,因为他没有地址栏,收藏以及标签等。最好把它想做事html页面中的标记。你将会看到它能够自动缩放,这些都是内置的。
另一个特色是这个控件能够加载本地或是网络内容。这一位置,如果我有一堆的html文档,我不必在程序中重新创建它们,直接将html页面嵌入在我的程序中。这要比数据传输简单的多。
通过浏览器控件加载HTML内容
尽让说到这里,就要展示具体做法。首先,我选哦添加一些文档到本地,我添加了一些测试目的的文档,这些都是由你自己决定的。
然后,我放置两个按钮来加载不同的文件。如下,我们需要这些引用:
using System.IO;
using Microsoft.Xna.Framework; 你也许在想“XNA?”。我将会在以后告诉你XNA命名空间的强大,首先加载html为StreamReader,然后将html加载到浏览器控件中,这些需要使用.NavigateToString()方法:
StreamReader reader = new StreamReader(TitleContainer.OpenStream("html/wp7wiki.html"));
Browser.NavigateToString(reader.ReadToEnd()) 如果你想了解System.Xna.Framework或TitleContainer类,可以在MSDN找到。脚本默认禁止当你打算加载含有javascript的html的时候,你应当知道脚本默认是被禁止的。通过简单设置IsScriptEnabled属性能够将它开启:XAML:
C#:
Browser.IsScriptEnabled = true; 在程序与脚本之间交互
如果你想能够让脚本来时html内容呈现方式多元化,这很简单。如果你想从程序向页面传输数据,你可以使用.InvokeScript()方法来实现,如下:
string returnValue = (string)Browser.InvokeScript("getText", "http://jeffblankenburg.com", "rocks", "awesomely"); 想反过来做,你需要做额外的异步:设置一个脚本反应的句柄,为了这样做,我创建了一个.ScriptNotify事件句柄来处理脚本传输给我的数据。
void Browser_ScriptNotify(object sender, NotifyEventArgs e)
{
Browser.Navigate(new Uri(e.Value, UriKind.Absolute));
} 创建以后,只需要加如下代码完成实现:
window.external.Notify(http://jeffblankenburg.com); 因为很多时候你是在加载网络资源,你需要让用户知道正在发生什么。最好是使用进度条,展示用户我们在加载资源,请耐心等待。
在浏览器控件中使用进度条
MSDN有成堆的文章讨论这些,所以我不会说所有的内容。我将要做的是简单的创建一个等待动画给用户,这样他们知道你正在加载内容。为了使用进度条,我们需要设置IsIndeteminate=true,并且在恰当的时候将它显示或是隐藏。如下:
XAML:
C#:
void Browser_Navigating(object sender, NavigatingEventArgs e)
{
ProgBar.Visibility = Visibility.Visible;
}
void Browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
ProgBar.Visibility = Visibility.Collapsed;
}
你看到我使用Navigated以及Navigating事件来展示或是隐藏进度条。 |
|
|