一步一步学Silverlight 2系列(23):Silverlight与HTML混合之无窗口模式

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。

本文将介绍Silverlight与HTML混合编程之无窗口模式。

无窗口模式

为什么默认情况下Silverlight插件会拥有自己的窗口,所有的Silverlight的处理操作都会在该子窗口中完成。我们看一个例子:

先做一个简单的Silverlight界面:

<StackPanel>
    <StackPanel.Background>
        <LinearGradientBrush StartPoint="1,0" EndPoint="0,0">
            <GradientStop Color="Transparent" Offset="0" />
            <GradientStop Color="#FF6600" Offset="1" />
        </LinearGradientBrush>
    </StackPanel.Background>
    <TextBlock Text="这里是Silverlight" Margin="150 100 0 0" Foreground="White"/>
</StackPanel>

在测试页中定义两个样式,分别用来控制Silverlight插件和HTML内容的样式:

<style type="text/css">
    .slPlugin
    {
        position: absolute;
        top: 0px;
        left: 0px;
        width: 50%;
        height: 200px;
        border:dotted 2px #FF6600;
    }
    .content
    {
        position: absolute;
        top: 0px;
        left: 0px;
        border:dotted 2px #11FE02;
    }
</style>

为Silverlight插件设置样式,并将插件的背景设置为Transparent

<asp:Silverlight ID="Xaml1" runat="server" 
            Source="~/ClientBin/TerryLee.SilverlightWindowless.xap" 
            Version="2.0" CssClass="slPlugin" PluginBackground="Transparent"/>

放置一个div,里面加一些文本:

<div class="content">
       Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,
       如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,
       对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。
       《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、
       图形图像等几个方面带您快速进入Silverlight 2开发。
 </div>

现在来运行程序:

 TerryLee_Silverlight2_0106

可以看到,我们在div中放置的文本,有一部分被Silverlight区域挡住了,因为这时候Silverlight仍然以默认模式运行,它在浏览器中作为独立的一个子窗口而存在,可以通过属性Windowless来设置:

 TerryLee_Silverlight2_0107

设置Windowless为true之后,再运行程序:

 TerryLee_Silverlight2_0108

现在可以看到,文字信息可以显示在Silverlight插件之上。我们再调整一下文字区域和Silverlight插件的位置:

<div>
    <div class="content">
           Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,
           如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,
           对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。
           《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、
           图形图像等几个方面带您快速进入Silverlight 2开发。
     </div>
    <asp:Silverlight ID="Xaml1" runat="server" 
    Source="~/ClientBin/TerryLee.SilverlightWindowless.xap" 
    Version="2.0" CssClass="slPlugin" PluginBackground="Transparent"
    Windowless="true"/>
</div>

再运行一下程序:

TerryLee_Silverlight2_0109 

这时Silverlight显示在文字的上面,由于设置为背景为透明的,这样就可以看到一部分文字。

结束语

本文内容比较少,简单介绍了混合Silverlight和HTML——Silverlight插件的无窗口模式相关内容,其实就是Windowless属性的设置:)

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
标签: Silverlight
posted @ 2008-03-14 19:42 TerryLee 阅读(12176) 评论(41) 编辑 收藏

 回复 引用 查看   
#1楼 2008-03-14 20:31 生鱼片      
差好几篇了,周末要抓紧补上
 回复 引用 查看   
#2楼 2008-03-14 21:37 <∩扫地僧∩>      
关注中!
 回复 引用 查看   
#3楼 2008-03-14 21:39 阿不      
terry太强了。
 回复 引用   
#4楼 2008-03-14 22:34 5254341[未注册用户]
顶一下,李同学。
这个系列一定要认真学习一下。要不太对不住李同学付出的幸苦与努力了

 回复 引用 查看   
#5楼[楼主] 2008-03-14 22:50 TerryLee      
@生鱼片
加油

 回复 引用 查看   
#6楼[楼主] 2008-03-14 22:50 TerryLee      
@&lt;∩扫地僧∩&gt;
谢谢:)

 回复 引用 查看   
#7楼[楼主] 2008-03-14 22:50 TerryLee      
@阿不
多谢,呵呵:)

 回复 引用 查看   
#8楼[楼主] 2008-03-14 22:50 TerryLee      
@5254341
谢谢:)

 回复 引用   
#9楼 2008-03-14 22:58 hlink[未注册用户]
谢谢

如果xaml也支持就好了

 回复 引用 查看   
#10楼[楼主] 2008-03-14 22:59 TerryLee      
@hlink
你不会想xaml和HTML一起编写吧:)

 回复 引用 查看   
#11楼 2008-03-14 23:20 Jeffrey Zhao      
--引用--------------------------------------------------
TerryLee: @hlink
你不会想xaml和HTML一起编写吧:)
--------------------------------------------------------
其实我觉得这个是方向吧

 回复 引用 查看   
#12楼[楼主] 2008-03-14 23:31 TerryLee      
@Jeffrey Zhao
现在倒是提供相关的方法操作DOM

但是xaml和HTML一起混合编写在SL2是没什么希望了,微软现在是希望WPF和Silverlight共用XAML,如果和HTML一起混合的话,移植到WPF上就麻烦了

 回复 引用 查看   
#13楼 2008-03-14 23:42 仁面寿星      
请问Silverlight 2 Beta 是不是不支持中文版的VS2008吗?
有办法支持吗?

 回复 引用 查看   
#14楼[楼主] 2008-03-14 23:59 TerryLee      
@仁面寿星
不好意思,中文版的我没装过啊,不太清楚:)

 回复 引用 查看   
#15楼 2008-03-15 08:52 生鱼片      
@仁面寿星
支持的啊,我一路Next就可以了啊

 回复 引用   
#16楼 2008-03-15 09:24 5254341[未注册用户]
TerryLee问一个与Silverlight不相关的问题。
1, ListView能否在绑定数据时动态的改变某一行或某一个单元格的颜色(例如:如果某一字段的值为负数,那么这一字段所在的行颜色改变)
2,鼠标移动到某一行的时候颜色改变
3,合并指定列的相邻且内容相同的单元格
能否推荐一些相关的文正或者范例。我现在能找到的文章范例大多都是分页,布局,修改,删除等。
谢谢啦

 回复 引用   
#17楼 2008-03-15 11:27 sl新学者[未注册用户]
请问一下李老师:
silverlight都是在客户端操作的,那么如何在服务器端维持一个session呢?

 回复 引用 查看   
#18楼[楼主] 2008-03-15 17:18 TerryLee      
@5254341
应该是可以的,ListView应该是相当灵活的一个控件,我在以前的推荐系列中曾经推荐过几篇有关ListView的文章,你可以参考一下

 回复 引用 查看   
#19楼[楼主] 2008-03-15 17:18 TerryLee      
@sl新学者
可以在Host Silverlight的页面中维持

 回复 引用 查看   
#20楼 2008-03-15 21:21 无常      
窗口和非窗口模式有何优劣处?
 回复 引用 查看   
#21楼[楼主] 2008-03-15 22:30 TerryLee      
@无常
这个谈不上优劣,根据你实际开发的需要来决定是否要使用无窗口模式

 回复 引用   
#22楼 2008-03-16 08:23 5254341[未注册用户]
--引用--------------------------------------------------
TerryLee: @5254341
应该是可以的,ListView应该是相当灵活的一个控件,我在以前的推荐系列中曾经推荐过几篇有关ListView的文章,你可以参考一下
--------------------------------------------------------
呵呵。谢谢老大的回复!
你推荐的文章我都仔细看过的。ListView方面写的都是如何分页,布局等。

 回复 引用 查看   
#23楼 2008-03-24 16:32 Cat Chen      
@TerryLee
没错,Microsoft总是想要Silverlight实现WPF/E,就是同一份XAML在WPF和Silverlight之间是通用的,这个我觉得意义不大,因为大多数应用都不会为同一个功能制作Windows Client和Web Client两个副本。

 回复 引用 查看   
#24楼[楼主] 2008-03-24 21:15 TerryLee      
@Cat Chen
是啊,截止目前为止,我还真没看到有哪个应用有两个,呵呵:)

 回复 引用   
#25楼 2008-12-18 15:50 黑暗之狐[未注册用户]
老大,我设了(我是htm页面)
<param name="Pluginbackground" value="transparent" />
<param name="Windowless" value="true" />
还是不能透明,还有其它需要修改的吗?xap文件里面需不需要做什么特殊的修改

 回复 引用 查看   
#26楼[楼主] 2008-12-19 01:34 TerryLee      
@黑暗之狐
xap文件不用做什么设置,可能是你的参数名有问题。

 回复 引用   
#27楼 2008-12-22 09:55 黑暗之狐[未注册用户]
@TerryLee
Pluginbackground,Windowless这两个参数的大小写都换过,没有用的。

 回复 引用 查看   
#28楼[楼主] 2008-12-23 10:23 TerryLee      
@黑暗之狐
要不把你的代码发给我看一下?

 回复 引用 查看   
#30楼 2009-03-03 16:50 菩提树下的杨过      
@黑暗之狐
你写错了,如果要用<object></object>的方式直接在html上写,应该是
<param name="background" value="transparent" />
<param name="Windowless" value="true" />

因为TerryLee是直接用vs生成的aspx测试页运行的,默认情况下,vs会在aspx上添加一个<asp:Silverlight>控件,用控件方式写的话,就是
<asp:Silverlight ID="Xaml1" runat="server"
... PluginBackground="Transparent"
Windowless="true"/>即文中的写法


 回复 引用   
#31楼 2009-06-03 16:20 l1q4[未注册用户]
恳请问李哥,我想让silverlight在ie中水平居中,应该如何设置div的样式呢??谢谢在百忙之中帮我解决问题
 回复 引用 查看   
#32楼 2009-07-29 01:13 惜分飞      
@l1q4
直接把siverlight外面的div设置成和siverlight等大小,然后让div居中
这个是我的思路,不知道对不?

 回复 引用 查看   
#33楼 2009-08-28 16:43 居后不争      
楼主真讲究
 回复 引用   
#34楼 2009-11-30 13:43 我脾气暴[未注册用户]
@5254341
叫李老师好吗?

 回复 引用 查看   
#35楼 2010-10-18 15:17 heiyumars      
记号。