五款Silverlight呈現HTML方式測試
来源:互联网 发布:单向环状链表反转 java 编辑:程序博客网 时间:2024/05/02 04:28
======================================================
注:本文源代码点此下载
======================================================
前言
最近在嘗試silverlight上呈現html內容,花了不少時間,可以說沒有真正的好方案,以下是我的測試結果,供各位網友參考。
測試內容
我主要想測4個東西,
給html文字是否可以呈現,包含了table。
給url瀏覽其他網站,且可以完整的呈現。
可否javascript操作。
能不能print印列其內容。
webbrowser
js:可(同網域) html:可 web:可 print:可
本來很期待silverlight 4這一個功能的,而且在教學影片或聽老師們介紹,我好像都沒有注意到它一定要在out of browser (oob)才能執行,等到真正開始測的時候才發現,令人大失所望,而且我在測試時按右鍵,看到了ie的選項,我終於知道他為什麼要oob了,因為要與com整合,呼叫ie的核心,很想說silverlight開發團隊也太懶了吧,不過又想想寫一個browser也不是簡單的事,而印列方面必需搭配webbrowserbrush,如下面的範例。
// 用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");
相關教學
webbrowser class
silverlight 4 html puzzle: how does it work?
什麼是out of browser?
out of browser是可以讓silverlight安裝在window的電腦上執行,不需要使用瀏覽器就可以使用,相對的可以取得較多的功能與權限,如果想在linux上也要用out of browser功能,網路上說moonlight 3可以支援,不過我沒試過,而且像webbrowser這種用com的元件,真的可以在linux上執行嗎?令人懷疑,而mac上暫時沒有看到相關的技術,可以讓silverlight out of browser。
richtextbox
js:否 html:否 web:否 print:可
richtextbox測試只能使用xaml,除非學下面的幾個元件去將html轉成xaml(不是百分之百就是了),還有印列時只會對richtextbox的外觀繪圖,如果文字太長有scrollbor,scrollbor也會印列,不過小弟有試出無分頁的解決方法。
///
/// 用遞迴找出scrollviewer
///
private scrollviewer getscrollviewer(dependencyobject parent)
{
if (parent == null)
{
return null;
}
for (int i = 0; i if (temp is scrollviewer || ((temp = getscrollviewer(temp)) is scrollviewer))
{
return temp as scrollviewer;
}
}
return null;
}
// 只要針對ms.internal.richtextboxview輸入,就可以得到全面書面,但超出一張大小會被截掉。
uielement target = getscrollviewer(rtb).content as uielement;
args.pagevisual = target;
// 預覽也可以用ms.internal.richtextboxview。
previewimage.source = new writeablebitmap(target, null);
暫時還沒有去研究如何讓pringdocuemnt分頁,如果有好方案可以告許我。
相關教學
richtextbox overview
silverlight text editor sample
richtextbox richtextarea 傻傻分不清楚
我找到很多silverlight 4 beta的範例(2010/3以前的),如果你是跟我一樣使用silverlight 4 tools rc2 for visual studio 2010開啟範例,你百分百之也無法執行,錯在找不到richtextarea這個控制器,原來它改名成richtextbox,連method也改名了,請把setpropertyvalue改成applypropertyvalue。
htmlhost 假貨系列
js:可(同網域) html:可 web:可 print:否
為什麼叫假貨系列呢,因為他們的控制項不是真的在silverlight中,而是在silverlight上放一個html的iframe,用dom與javascript去互動,害我一開始看到demo很開心,想說找到可行方案了,仔細操作才發現他們是假的,還有因為是使用dom無法在out of browser上操作、silverlight enablehtmlaccess 屬性必需設定為 true,printdocument也無法印列其內容 。
html host control
這就是他們的實作方式。
divelements htmlhost
跟上一個元件同樣的操作原理。
componentone htmlhost
雖然我覺得這作法很假,但webbrowser好像也沒好到那裡去,而且還不用out of browser,我試過新增移除放大縮小,後二個都有寫dom+javascript去操作,只是有時差(試試componentone htmlhost demo就可以感受了)。
liquid richtextbox
js:否html:免強可 web:否 print:可
這元件有提供html的匯入與匯出,匯出正常,但匯入是這元件用將html解悉成xaml,太複雜的格式會失敗,雖然無法使用javsscript,但可以寫silvelight的code去互動,如範例。
// 當匯入從文字轉成xaml元件時發生的事件
this.richtextbox.elementread += (obj, args) =>
{
if (args.source is image)
{
// 當元件是圖片,點擊圖片時放大。
args.source.mouseleftbuttonup += (img, mouseargs) =>
{
childwindow cw = new childwindow();
cw.width = 800;
cw.height = 600;
image i = new image();
i.source = (img as image).source;
i.stretch = stretch.uniform;
cw.content = i;
cw.show();
};
}
};
公司內的一個專案用了這個元件半年多了,在silvelight 4還沒出來前,這是試過最好的richtexbox,不過對中文支援度非常的差,有時跑動畫,richtextbox內有中文字就死當了,為什麼動畫呢?,那個專案是online project manager,每個project下有weeklynote,而weeklynote就是使用這一個元件,不同的project與weeklynote切換應好客戶的要求,要有過場動畫,還有打中文字有時文字會暫時消失,按下enter才會重現等等只有輸入中文才會發生的問題,不然我覺得滿好用的。
htmltextbox
js:否 html:免強可 web:否 print:可
這是早在silverlight 2時國外的高手就寫出如何將html轉成xaml的元件,雖然能轉換的格式不多,如果是很簡單的需求,可以參考這個元件。
template = xamlreader.load(
"controltemplate " +
"xmlns='http://schemas.microsoft.com/client/2007' " +
"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>" +
"textblock " +
"x:name=\"textblock\" " +
"/>" +
"controltemplate>") as controltemplate;
applytemplate();
動態載入xaml成template就是從這個元件學到的。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
- 五款Silverlight呈現HTML方式測試
- HTML页面跳转的五种方式
- HTML页面跳转的五种方式
- 学习SilverLight(五)
- SilverLight五大变形金刚
- Silverlight C# 游戏开发:游戏循环体的五种设计方式
- javascript 获取HTML DOM对象五种方式
- javascript 获取HTML DOM对象五种方式
- Silverlight 和html 交互
- Silverlight与Html交互
- SilverLight + Html + JavaScript
- Silverlight - Html Host Control
- HTML(五)
- SilverLight 操作HTML元素 和HTML元素操作SilverLight对象
- silverlight touch_3__interactive with html (C#)
- 添加Silverlight应用到HTML
- Silverlight与HTML双向交互
- 添加Silverlight应用到HTML
- Delphi中的字符串(转)
- ASP.NET AJAX(1)__Microsoft AJAX Library
- js过滤HTML标签以及
- ACM中Java的应用
- 用CSS3打造HTML5的Logo
- 五款Silverlight呈現HTML方式測試
- asp.net Ajax3.5后台框架控件
- ASP.NET 与 Ajax 的实现方式
- Tomi-Eric's
- 鸡肋烹制出的美味——真正可调试的ASP.NET AJAX
- Html中的table
- 分享21个非常棒的HTML5视频教程
- HTML 5的革新:结构之美
- Java Math类的一些方法