• [转]在Silverlight中嵌入HTML、Flash和PDF文件


     注:转自http://www.cnblogs.com/Kinglee/archive/2009/10/20/1587113.html

    最近在研究怎样将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;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);

            }

        }

    }

    最终效果图:

     

    源代码下载:

     

     

  • 相关阅读:
    今天光棍节,有新发现
    订购了一台Wp7,来测试一下让程序跑在wp7上吧
    3D场景编辑器 0.1
    新进展
    XXX(脏话)的腾讯,敢给我解释一下么?
    扣扣起司,架构设计(重复造轮子了,发现了MSNLite)
    关于WP7开发,随笔
    关于content管道,让我们继续
    微软,还我Input.Touch模块
    为什么要抛弃content
  • 原文地址:https://www.cnblogs.com/wangweixznu/p/2120567.html
Copyright © 2020-2023  润新知