Silverlight读XML是件痛苦的事情

本来以为Silverlight读XML那岂不是太方便了,没想到用Silverlight来读取XML中的节点原来是件非常令人痛苦的事情,尽管你用的是C#!因为Sivlerlight把WPF精简得太厉害,读XML只有XmlReader了……XmlReader是不支持XPath和XmlDocument的(这么好的东西都不要,莫非是因为Silverlight的体积问题?)

如果要用Silverlight读XML,建议看看这两篇文章:

1. Working with XML in Silverlight

2. howto使用http接收和发送简单的xml请求

有个建议,在读取每个节点的值之前最好先判断一下节点的类型(NodeType),否则很有可能出现一些不可解释的“灵异”现象………

让网页中的Silverlight背景也透明

Silverlight的背景也是可以透明的,改改JS代码就好了~

打开TestPage.html.js(默认的文件名),修改createSilverlight()函数,在properties大括号中增加两行:

isWindowless: “true”,
background: “#00ffffff”,

由于Sivlerlight中的颜色采用ARGB模式,即Alpha、Red、Green、Blue各用两位十六进制数来表示,所以只要把代表Alpha的那两位设置为00就行了,其他的随便了,反正透明了也看不到。

如果是把这两行放到原来代码的最后面(properties大括号以内),要记得把原来的最后一行代码末尾加上一个半角的逗号,而现在的最后一行就不要那个逗号了,即这个样子的:

properties: {
width: “100%”,
height:

视频:好玩,Gmail背后的故事

上了Gmail,发现右上角有个醒目的链接“Watch Our Video”,点过去一看,原来是一段关于Gmail是怎样传送的视频。视频中的人物都是各显身手,绝技不断,很有些意思,可以看看哦~

视频播放地址:http://www.youtube.com/watch?v=VfDW7qAdFGk

(nnd,才发现我的BLOG没有插入视频功能……)…

在Silverlight中实现定时器功能

上次写了一篇WPF中的定时器类,那个定时器类在Silverlight中也被精简下岗了(还有许多常用的方法或被精简了或直接下岗了,使用起来远没有WPF方便……),定时器还得用,而Timer类实在是不好用(都是因为线程……),只有另想办法了。有个不错的方式,通过Storyboard来实现,把Storyboard的时间设置为一秒,然后在这个Storyboard结束后进行你想要的操作,同时重新开始这个Storyboard,那么这就相当于一个一秒的定时器了,方法很巧。实现代码如下:

loopTimer = new Storyboard();
loopTimer.Duration = TimeSpan.FromSeconds(1);
loopTimer.SetValue(Storyboard.NameProperty, “looptimer”);
this.Resources.Add(loopTimer);

在Silverlight中使用中文

前面的操作方法请参考此文:http://silverlight.cn/forums/thread/549.aspx

我使用的是方案二:

* 首先使用Word或者写字板应用程序,使用您中意的字体输入你的Silverlight中所需要的文字;
* 然后在Word或者写字板当中选择“打印”功能,打印机选择Microsoft XPS Document Writer(在您安装了.NET 3.0 Framework)后会自动增加;
* XPS Document Writer本身是一个打印到文件功能,在其文件选择框中选择文件路径,并且给出相应的文件名;
* 打印完成后,在文件浏览器中找到完成的XPS文件,并且将其后缀名由”.xps”修改为”.zip”;(其实微软的好多文件格式目前都使用了ZIP格式,比如Office 2007中的DOCX、PPTX、XLSX等等,都可以将名字改为ZIP后缀名,并且使用WinZip或者其它文件压缩程序打开)

Silverlight与Flash相比几大缺点

Silverlight是微软正在推广的专门针对Flash的一个浏览器插件,被众多人誉为“Flash”杀手,但从我了解的来看,Silverlight要在短期内打败Flash,并不会有那么容易。

1、跨域读取数据的问题

基于安全考虑,浏览器插件和脚本都是不可以跨域的,Silverlight亦是如此(Silverlight在读取视频文件时可以跨域)。Flash只需在需要跨域的根域下放置一个XML文件即可轻松搞定跨域问题,而Silverlight则需要通过WebService来解决,如果要用WebService,Flash同样也可以随意跨域了。

2、动画制作与设计功能不够强大

Flash在这个方面占有绝对优势,无论从动画设计还是动画编程来说,无论从轻松易用和复杂程度来说Silverlight远远不及Flash。虽然Silverlight可以利用面向对象的C#来进行编程,而AS 3也已经完全成为一种面向对象的编程预言,其语法结构与C#非常类似,Silverlight在这个方面已经没有太多的优势。…

Silverlight对视频流HTTP请求头的要求

Silverlight对视频流HTTP请求头的要求很BT,折腾了一天才发现这个问题。

Silverlight播放视频时,视频源可以是其他域的,即是可以跨域的。读取其他数据是不可以跨域的,比如XML数据等。

Silverlight是集成了Windows Media Player的解码器的,在没有安装Windows Media Player的情况下,只要安装了Silverlight就可以在Silverlight中播放WMV、ASF、MP3等格式的视频和音频文件。Silverlight 1.1 Alpha版安装包总共不到5M,是WPF的精简版,因此解码器精简的程度也可见一斑。

自己弄了个HTTP服务,HTTP响应头并不规范,但这些视频流能在Windows Media Player或者WPF下播放,却不能在Silverlight下播放。但是如果是放在IIS下则能正常播放,于是开始观察HTTP请求,看看二者有什么不一样。然后按照IIS下的HTTP请求头重写了HTTP服务,使其HTTP响应头与IIS下的一样,结果发现果然能够正常播放了!再经仔细测试,发现HTTP响应头中只要含有协议、状态和Content-Length就可以了。…

让Silverlight的大小随浏览器大小变化

当浏览器里只有一个Silverlight,没有其他内容时,我们会希望它能够自适应浏览器大小(屏幕大小),flash在解决这个问题时很为难,而用Silverlight则可以轻松解决自适应大小的问题。

首先,在你的HTML页面中,修改这一行CSS代码:

.silverlightHost { width: 640px; height: 480px; }

改为:

.silverlightHost { width: 100%; height: 100%; }

那么,你现在的Silverlight就是自适应大小的了,但是还有很多问题要解决的,比如你的背景图片大小也得跟着改变了,还有元件布局也得跟着变……因为现在Silverlight还不能像WPF那样自动布局,只能指定绝对位置。不过还好,当Silverlight大小发生变化的时候存在BrowserHost.Resize这样一个事件,我们为这个事件写一个EventHandler就好了,而当前Silverlight的尺寸大小则可以通过BrowserHost.ActualWidth和BrowserHost.ActualHeight来获取,那么手动布局也就还算方便了,不过要是能使用相对位置自动布局就更方便了,不知道Silverlight…

Silverlight使用全屏实在是简单


在网页中浏览视频,使用全屏播放往往能够给用户更好的体验,Silverlight对全屏支持很好,简单几行代码就能搞定全屏的问题。

BrowserHost对象有个属性就是IsFullScreen,设置其为True时就可以实现全屏,设置为False就可以退出全屏,默认情况下按ESC时就可以退出全屏。后来发现,按Alt+Tab也可以,^_*

简单的代码如下:

public void Page_Loaded(object o, EventArgs e)
{
//Required to initialize variables
InitializeComponent();

fullButton.MouseLeftButtonDown += new MouseEventHandler(bgRect_MouseLeftButtonDown);
}

void bgRect_MouseLeftButtonDown(object sender, MouseEventArgs

[翻译]The Web Is Dead

The Web Is Dead
(Long Live the Web!)
Web死了
(Web万岁)

by Rockford Lhotka
August 1, 2007
http://www.ftponline.com/vsm/2007_08/magazine/departments/guestop/

============================================
译者Fdream注:
似乎Web正如日中天,但是不难发现,Web技术的发展却远远超出了最初的HTML,各种个样的技术的出现,是否意味者Web已经结束了或者即将结束?如果Web结束了,我们用什么来替代Web所带来的一切方便和好处?

该文作者是微软公司的地区主管,文章中极度地对Silverlight进行了赞颂,但是从中我们也可以对Web的未来有所遇见,也可以看到微软对Web的一些策略。
============================================…