跳转到路径导航栏
跳转到正文内容

Silverlight 4 火影忍者:Web特性大显身手(2)

http://www.sina.com.cn  2010年08月12日 10:18  IT168.com

  五、InvokeScript方法及ScriptNotify事件应用举例

  根据前面的控件定义,我们知道:InvokeScript方法能够执行在当前加载的HTML中定义的指定脚本。

  根据MSDN指示,如果对InvokeScript的调用加载跨域内容,我们可以不再用InvokeScript与该内容交互。而且,出于安全原因,你不能在

<iframe>

  中承载的脚本目标上调用此方法。

  InvokeScript方法提供了如下两种重载形式:

  (1)public object InvokeScript(string scriptName);

  (2)public object InvokeScript(string scriptName, params string[] args);

  在下面的示例中,调用了InvokeScript,它在以下HTML中反过来调用LoadSearch函数。注意,这个HTML文件必须与Silverlight应用程序承载在同一个域中。

  你可以使用Window.external对象的Notify方法从HTML中的JavaScript传输到托管代码。在发生此情况时,将触发ScriptNotify事件。

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
<script type="text/javascript" >
function LoadSearch(searchString) {
window.location
= "http://www.bing.com/search?q=" + searchString
window.external.notify(
"Search completed")
}
</script>
</head>
<body>
Silverlight WebBrowser control。
</body>
</html>

  现在,让我们来观察一下客户端后台代码:

public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
void WB1_ScriptNotify(
object sender, NotifyEventArgs e)
{
Button1.Content
= e.Value;
Button1.IsEnabled
= false;
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
object results = WB1.InvokeScript("LoadSearch", new string[] { "Silverlight" });
}
}

  接下来,让我们再来观察一下客户端Silverlight 4 XAML脚本:

<StackPanel x:Name="LayoutRoot" Height="358" Width="489" Background="LightBlue">
<WebBrowser  x:Name="WB1" Source="http://localhost/HTMLPage1.htm" Height="272" Width="379"
ScriptNotify
="WB1_ScriptNotify" Margin="5" />
<Button Width="200" x:Name="Button1" Content="Click to search!" Click="Button1_Click" />
</StackPanel>

  归纳来看,InvokeScript方法及ScriptNotify事件联手提供了一种从WebBrowser控件中与其所承载的HTML中的JavaScript代码进行的一种重要途径。

  六、联手使用WebBrowser和WebBrowserBrush控件

  WebBrowser和WebBrowserBrush控件设计为一起使用,以便在浏览器外运行的Silverlight应用程序中显示丰富的HTML内容。

  你不能旋转、应用效果或创建部分透明的WebBrowser控件。此外,不能使用WebBrowser控件覆盖HTML上的Silverlight内容。对于这些情况,应该使用WebBrowserBrush。

  (一)WebBrowserBrush简介

  WebBrowserBrush是Brush对象的类型,该对象类似于VideoBrush。但是,该对象使用HTML内容而不是视频内容来绘制区域。 此HTML内容由WebBrowser控件提供。与其他画笔类型类似,你可以使用WebBrowserBrush来绘制以下内容:

  •    形状(例如Rectangle)的填充。
  •    Path的几何内容。
  •    Canvas的背景色。
  •    TextBlock的前景色。

  与其他类型的画笔不同,你必须通过调用Redraw方法,手动更新WebBrowserBrush中的内容。

  为了使用WebBrowserBrush,你需要事先创建WebBrowser控件并且设置其Source属性。然后,你可以将 WebBrowserBrush应用于要绘制的对象,并且将该WebBrowserBrush对象的SourceName属性设置为你创建的 WebBrowser的名称。

  如果WebBrowser中的内容有更改,你必须调用Redraw方法更新 WebBrowserBrush。此外,用户无法与通过WebBrowserBrush一起显示的内容交互。下面的示例说明如何显示具有 WebBrowserBrush的内容。在这个示例中,在用户移动鼠标时,将更新WebBrowserBrush的内容。

留言板电话:010-62675595

新浪简介About Sina广告服务联系我们招聘信息网站律师SINA English会员注册产品答疑┊Copyright © 1996-2010 SINA Corporation, All Rights Reserved

新浪公司 版权所有