稳扎稳打Silverlight(43) - 4.0控件之WebBrowser, WebBrowserBrush

[源码下载]


稳扎稳打Silverlight(43) - 4.0控件之WebBrowser, WebBrowserBrush


作者: webabcd


介绍
Silverlight 4.0 控件一览:
  • WebBrowser - 在 Silverlight 应用程序中显示 HTML 内容(只能在 OOB 模式下运行)
  • WebBrowserBrush - 一个 WebBrowser 类型的画笔(只能在 OOB 模式下运行) 


在线DEMO
http://www.cnblogs.com/webabcd/archive/2010/08/09/1795417.html


示例
 1、Viewbox 的 Demo
WebBrowserDemo.xaml
代码
< navigation:Page  x:Class ="Silverlight40.Control.WebBrowserDemo"  
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
           xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
           xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           Title
="WebBrowserDemo Page" >
    
< Grid  x:Name ="LayoutRoot" >
        
< StackPanel  HorizontalAlignment ="Left" >

            
< Button  Name ="btnOutOfBrowser"  Click ="btnOutOfBrowser_Click"   />

            
< Button  Name ="btnSource"  Content ="Source 属性"  Click ="btnSource_Click"   />

            
< Button  Name ="btnNavigate"  Content ="Navigate 方法"  Click ="btnNavigate_Click"   />

            
< Button  Name ="btnNavigateToString"  Content ="NavigateToString 方法"  Click ="btnNavigateToString_Click"   />

            
< Button  Name ="btnScript"  Content ="与 WebBrowser 中的脚本交互"  Click ="btnScript_Click"   />

            
< WebBrowser  Name ="webBrowser"  Width ="400"  Height ="300"  ScriptNotify ="webBrowser_ScriptNotify"  LoadCompleted ="webBrowser_LoadCompleted"   />

        
</ StackPanel >
    
</ Grid >
</ navigation:Page >

WebBrowserDemo.xaml.cs
代码
/*
 * WebBrowser - 在 Silverlight 应用程序中显示 HTML 内容(只能在 OOB 模式下运行)
 *     Source - 将指定的 URI 中的 HTML 内容显示在 WebBrowser 中
 *     Navigate() - 加载指定的 URI 中的 HTML 内容到 WebBrowser 中
 *     NavigateToString() - 显示指定的 HTML 内容
 *     SaveToString() - 获取当前 WebBrowser 所显示的 HTML 内容,返回一个字符串类型(不能跨域)
 *     InvokeScript() - 调用当前 WebBrowser 所加载的 HTML 内容中的 JavaScript 脚本(不能跨域)
 *     ScriptNotify - 当 WebBrowser 内的 JavaScript 以 “window.external.notify(string);” 的方式发送信息到 Silverlight 程序中时所触发的事件(不能跨域)
 *         NotifyEventArgs - ScriptNotify 事件的事件参数
 *         NotifyEventArgs.Value - JavaScript 发送到 Silverlight 程序中的信息。即 “window.external.notify(string);” 中的字符串
 
*/

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;
using  System.Windows.Navigation;

namespace  Silverlight40.Control
{
    
public   partial   class  WebBrowserDemo : Page
    {
        
public  WebBrowserDemo()
        {
            InitializeComponent();
        }

        
protected   override   void  OnNavigatedTo(NavigationEventArgs e)
        {
            
if  (App.Current.IsRunningOutOfBrowser)
                btnOutOfBrowser.Content 
=   " 卸载 " ;
            
else
                btnOutOfBrowser.Content 
=   " 安装 " ;
        }

        
private   void  btnOutOfBrowser_Click( object  sender, RoutedEventArgs e)
        {
            
if  ( ! App.Current.IsRunningOutOfBrowser  &&  App.Current.InstallState  ==  InstallState.NotInstalled)
                App.Current.Install();
            
else
                MessageBox.Show(
" 已经安装,使用右键卸载 " );
        }


        
private   void  btnSource_Click( object  sender, RoutedEventArgs e)
        {
            webBrowser.Source 
=   new  Uri( " http://webabcd.cnblogs.com " );
        }

        
private   void  btnNavigate_Click( object  sender, RoutedEventArgs e)
        {
            webBrowser.Navigate(
new  Uri( " http://www.cnblogs.com/webabcd/archive/2007/02/24/655035.html " ));
        }

        
private   void  btnNavigateToString_Click( object  sender, RoutedEventArgs e)
        {
            webBrowser.NavigateToString(
" <div style='color: red'>webabcd</div> " );
        }

        
private   void  btnScript_Click( object  sender, RoutedEventArgs e)
        {
            webBrowser.Navigate(
new  Uri( " http://localhost:9483/Silverlight40TestPage.html " ));
        }

        
private   void  webBrowser_ScriptNotify( object  sender, NotifyEventArgs e)
        {
            
//  获取 WebBrowser 中的 HTML 内所包含的 JavaScript 发给 Silverlight 程序的信息
            MessageBox.Show(e.Value);

            
//  调用 WebBrowser 中的 HTML 内所包含的 JavaScript 函数
            MessageBox.Show(( string )webBrowser.InvokeScript( " hello " " webabcd " ));   
        }

        
private   void  webBrowser_LoadCompleted( object  sender, NavigationEventArgs e)
        {
            
try
            {
                
string  html  =  webBrowser.SaveToString();
                MessageBox.Show(html);
            }
            
catch  (System.Security.SecurityException se)
            {
                MessageBox.Show(se.Message);
            }
        }
    }
}

相关的 JavaScript 部分
Silverlight40TestPage.html
代码
     < script type = " text/javascript " >

        
//  此函数用于:Silverlight 程序调用 WebBrowser 所加载的 HTML 内容中的 JavaScript 函数
         function  hello(name) {
            
return   " hello:  "   +  name;
        }

        
//  此方法用于:在 WebBrowser 所加载的 HTML 内容中用 JavaScript 向 Silverlight 程序发送信息
         try  {
            window.external.notify(
' window.external.notify to silverlight ' );
        } 
catch  (err) { } 
    
    
< / script>


2、WebBrowserBrush 的 Demo
WebBrowserBrushDemo.xaml
代码
< navigation:Page  x:Class ="Silverlight40.Control.WebBrowserBrushDemo"  
           xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
           xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"  
           xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
           xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           Title
="WebBrowserBrushDemo Page" >
    
< Grid  x:Name ="LayoutRoot"  MouseMove ="LayoutRoot_MouseMove" >
        
< StackPanel  HorizontalAlignment ="Left" >

            
< Button  Name ="btnOutOfBrowser"  Click ="btnOutOfBrowser_Click"   />

            
< WebBrowser  Name ="webBrowser"  Width ="200"  Height ="150"  Source ="http://webabcd.cnblogs.com"   />

            
<!--
                演示在 Rectangle.Fill 中使用 WebBrowserBrush
            
-->
            
< Rectangle  Width ="200"  Height ="150"  HorizontalAlignment ="Left" >
                
< Rectangle.Fill >
                    
< WebBrowserBrush  x:Name ="webBrowserBrushRectangle"  SourceName ="webBrowser"  Opacity ="0.7" >
                        
< WebBrowserBrush.Transform >
                            
< ScaleTransform  ScaleX ="2"  ScaleY ="2"   />
                        
</ WebBrowserBrush.Transform >
                    
</ WebBrowserBrush >
                
</ Rectangle.Fill >
            
</ Rectangle >

            
<!--
                演示在 Canvas.Background 中使用 WebBrowserBrush
            
-->
            
< Canvas  Width ="200"  Height ="150"  HorizontalAlignment ="Left" >
                
< Canvas.Background >
                    
< WebBrowserBrush  x:Name ="webBrowserBrushCanvas"  SourceName ="webBrowser"  Opacity ="0.7"   />
                
</ Canvas.Background >
                
< Grid  Width ="200"  Height ="150" >
                    
< TextBlock  Text ="我是在 Canvas 里的 TextBlock"  HorizontalAlignment ="Center"  VerticalAlignment ="Center"   />
                
</ Grid >
            
</ Canvas >

            
<!--
                演示在 Path.Fill 中使用 WebBrowserBrush
            
-->
            
< Path  StrokeThickness ="10"  Stroke ="Red" >
                
< Path.Data >
                    
< EllipseGeometry  Center ="100,75"  RadiusX ="100"  RadiusY ="75"   />
                
</ Path.Data >
                
< Path.Fill >
                    
< WebBrowserBrush  x:Name ="webBrowserBrushPath"  SourceName ="webBrowser"  Opacity ="0.7"   />
                
</ Path.Fill >
            
</ Path >

        
</ StackPanel >
    
</ Grid >
</ navigation:Page >

WebBrowserBrushDemo.xaml.cs
代码
/*
 * WebBrowserBrush - 一个 WebBrowser 类型的画笔(只能在 OOB 模式下运行)
 *     SourceName - 为此画笔提供 HTML 内容的 WebBrowser
 *     Redraw() - 重绘画笔。当 WebBrowser 所加载内容更改时,需要调用此方法
 
*/

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;
using  System.Windows.Navigation;

namespace  Silverlight40.Control
{
    
public   partial   class  WebBrowserBrushDemo : Page
    {
        
public  WebBrowserBrushDemo()
        {
            InitializeComponent();
        }

        
protected   override   void  OnNavigatedTo(NavigationEventArgs e)
        {
            
if  (App.Current.IsRunningOutOfBrowser)
                btnOutOfBrowser.Content 
=   " 卸载 " ;
            
else
                btnOutOfBrowser.Content 
=   " 安装 " ;
        }

        
private   void  btnOutOfBrowser_Click( object  sender, RoutedEventArgs e)
        {
            
if  ( ! App.Current.IsRunningOutOfBrowser  &&  App.Current.InstallState  ==  InstallState.NotInstalled)
                App.Current.Install();
            
else
                MessageBox.Show(
" 已经安装,使用右键卸载 " );
        }


        
private   void  LayoutRoot_MouseMove( object  sender, MouseEventArgs e)
        {
            webBrowserBrushRectangle.Redraw();
            webBrowserBrushCanvas.Redraw();
            webBrowserBrushPath.Redraw();
        }
    }
}


OK
[源码下载] <script type="text/javascript"> if ($ != jQuery) { $ = jQuery.noConflict(); } </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值