在Silverlight中嵌入HTML、Flash和PDF文件

最近在研究怎样将html内容显示在Silverlight中的方法,于是上网查阅了相关资料,发现在Silverlight中实现嵌入html的步骤还是比较繁琐的。本人向来不愿意把事情复杂化,于是经过一番精心搜索,最终在Divelements上发现了HtmlHost这款小巧的组件。通过它的帮助,在Silverlight中嵌入HTMLFlashPDF文件等,就显得易如反掌了。

 

HtmlHost

网站:http://www.divelements.co.uk/silverlight/tools.aspx

下载:http://www.divelements.co.uk/silverlight/SilverlightTools.1.0.1.zip

 

接着,就对该组件进行介绍并且通过实际范例讲述该组件的应用。

 

1、基本特性

 

组件所在命名空间:

Divelements.SilverlightTools

 

组件常用属性:

SourceUri:显示在该组件中的内容的URI。

SourceHtml:用该组件显示的超文本内容。

Document:显示在该组件中的内容的HTML。

 

组件常用事件:

DocumentReady:当在该组件中的内容的HTML加载完毕后触发该事件。

 

 

2、实例讲解

注意:该组件需在windowless模式下才能正常运行。因此,首先要对服务端文件夹下的SilverlightClientTestPage.aspx文件或SilverlightClientTestPage.html文件做如下修改:(绿字粗体部分为新添加的内容)

<form id="form1" runat="server" style="height:100%">
 
    <div id="silverlightControlHost">
 
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
 
          <param name="source" value="ClientBin/SilverlightClient.xap"/>
 
          <param name="onError" value="onSilverlightError" />
 
          <param name="background" value="white" />
 
          <param name="minRuntimeVersion" value="3.0.40624.0" />
 
          <param name="autoUpgrade" value="true" />
 
          <param name="windowless" value="true" />
 
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
 
              <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
 
          </a>
 
        </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
 
    </form>

  

接着,将需要嵌入的Flash文件及PDF文件放置在服务端文件夹的根目录下。

右击SilverlightClient文件夹下的References,引入Divelements.SilverlightTools命名空间。按Ctrl+Shift+B编译。

然后,在SilverlightClient文件夹下新建一个Silverlight UserControl,将其命名为ControlHtmlHost.xaml。该文件内容如下:

 

<UserControl x:Class="SilverlightClient.ControlHtmlHost"
 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
xmlns:divtools="clr-namespace:Divelements.SilverlightTools;assembly=Divelements.SilverlightTools"
 
    Width="900" Height="530">
 
    <Grid x:Name="LayoutRoot" Background="White">
 
        <divtools:HtmlHost Name="htmlHost"/>
 
    </Grid>
 
</UserControl>

  

以下是MainPage文件的内容:

MainPage.xaml文件代码:

<UserControl x:Class="SilverlightClient.MainPage"
 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"        

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
 
  <Grid x:Name="LayoutRoot">
 
        <StackPanel>
 
            <!--导航栏-->
 
            <StackPanel Orientation="Horizontal" Background="WhiteSmoke">
 
                <Button x:Name="myHTML" Content="HTML内容" FontSize="14"/>
 
                <Button x:Name="myFlash" Content="Flash" FontSize="14"/>
 
                <Button x:Name="myPDF" Content="PDF文档" FontSize="14"/>
 
            </StackPanel>
 
            <Grid x:Name="Container"/>
 
        </StackPanel>
 
    </Grid>
 
</UserControl>

  MainPage.xaml.cs文件代码:

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 Divelements.SilverlightTools;
 
 
 
namespace SilverlightClient
 
{
 
    public partial class MainPage : UserControl
 
    {
 
        public MainPage()
 
        {
 
            InitializeComponent();
 
            //注册事件触发处理
 
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
 
            this.myHTML.Click += new RoutedEventHandler(myHTML_Click);
 
            this.myFlash.Click += new RoutedEventHandler(myFlash_Click);
 
            this.myPDF.Click += new RoutedEventHandler(myPDF_Click);
 
        }
 
 
 
        void MainPage_Loaded(object sender, RoutedEventArgs e)
 
        {
 
            GetRichContent("http://cn.bing.com", UriKind.Absolute);
 
        }
 
 
 
        void myPDF_Click(object sender, RoutedEventArgs e)
 
        {
 
            GetRichContent("/test.pdf",UriKind.Relative);
 
        }
 
 
 
        void myFlash_Click(object sender, RoutedEventArgs e)
 
        {
 
            GetRichContent("/clock.swf", UriKind.Relative);
 
        }
 
 
 
        void myHTML_Click(object sender, RoutedEventArgs e)
 
        {
 
            GetRichContent("http://cn.bing.com", UriKind.Absolute);
 
        }
 
 
 
        //获取Rich Content
 
        void GetRichContent(string uri,UriKind uk)
 
        {
 
            Container.Children.Clear();
 
            ControlHtmlHost chtml = new ControlHtmlHost();
 
            HtmlHost hh = chtml.FindName("htmlHost") as HtmlHost;
 
            hh.SourceUri = new Uri(uri, uk);
 
            Container.Children.Add(chtml);
 
        }
 
    }
 
}

  

最终效果图:

 

 

源代码下载:

posted @ 2013-03-02 14:32  银河系上的地球  阅读(238)  评论(0编辑  收藏  举报