[转]五款Silverlight呈现HTML方式比较

最近在尝试Silverlight上呈现HTML内容,花了不少时间,可以说没有真正的好方案,以下是我的测试结果,供各位网友参考。

测试内容,我主要想测4个东西,

1. 给HTML文字是否可以呈现,包含了Table。
2. 给URL浏览其他网站,且可以完整的呈现。
3. 可否Javascript操作。
4. 能不能Print印列其内容。

A. WebBrowser

JS:可(同网域) HTML:可 Web:可 Print:可

本来很期待Silverlight 4这一个功能的,而且在教学影片或听老师们介绍,我好像都没有注意到它一定要在Out of Browser (OOB)才能执行,等到真正开始测的时候才发现,令人大失所望,而且我在测试时右键单击,看到了IE的选项,我终于知道他为什么要OOB了,因为要与COM整合,呼叫IE的核心,很想说Silverlight开发团队也太懒了吧,不过又想想写一个Browser也不是简单的事。

以下是代码片段:
// 用WebBrowserBrush截取Web画面
WebBrowserBrush brush = new WebBrowserBrush();
brush.SetSource(this.webBrowser1);
PrintDocument print = new PrintDocument();
print.PrintPage += (obj, args) =>
{
args.PageVisual = new Border() { Background = brush };
args.HasMorePages = false;
};
print.Print(“Print Test”);
RichTextBox

B.RichTextBox

JS:否 HTML:否 Web:否 Print:可

RichTextBox测试只能使用XAML,除非学下面的几个组件去将HTML转成XAML(不是百分之百就是了),还有印列时只会对RichTextBox的外观绘图,如果文字太长有Scrollbor,Scrollbor也会印列。

C.HtmlHost 假货系列

JS:可(同网域) HTML:可 Web:可 Print:否

为什么叫假货系列呢,因为他们的控件不是真的在Silverlight中,而是在Silverlight上放一个Html的iframe,用 Dom与javascript去互动,害我一开始看到Demo很开心,想说找到可行方案了,仔细操作才发现他们是假的,还有因为是使用DOM无法在 Outof Browser上操作、Silverlight enableHtmlAccess 属性必需设定为true,PrintDocument也无法印列其内容。

这就是他们的实作方式。  divelements HtmlHost

跟上一个组件同样的操作原理。  ComponentOne HtmlHost

虽然我觉得这作法很假,但WebBrowser好像也没好到那里去,而且还不用Out ofBrowser,我试过新增移除放大缩小,后二个都有写DOM+Javascript去操作,只是有时差(试试ComponentOneHtmlHost Demo就可以感受了)。

D.Liquid RichTextBox

JS:否 HTML:免强可 Web:否 Print:可

这组件有提供HTML的汇入与汇出,汇出正常,但汇入是这组件用将HTML解悉成XAML,太复杂的格式会失败,虽然无法使用Javsscript,但可以写Silvelight的Code去互动,如范例。

公司内的一个项目用了这个组件半年多了,在Silvelight4还没出来前,这是试过最好的RichTexBox,不过对中文支持度非常的差,有 时跑动画,RichTextBox内有中文字就死当了,为什么动画呢?,那个项目是Online ProjectManager,每个Project下有WeeklyNote,而WeeklyNote就是使用这一个组件,不同的Project与 WeeklyNote切换应好客户的要求,要有过场动画,还有打中文字有时文字会暂时消失,按下Enter才会重现等等只有输入中文才会发生的问题,不然 我觉得满好用的。

E.HtmlTextBox

JS:否 HTML:免强可 Web:否 Print:可

这是早在Silverlight 2时国外的高手就写出如何将HTML转成XAML的组件,虽然能转换的格式不多,如果是很简单的需求,可以参考这个组件。



Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注