Silverlight 也出現在手機及PDA上

Silverlight 也出現在手機及PDA上
微軟這次打破了Windows Mobile一直以來的傳統,透露了一些關於接下來的Windows Mobile 7,8的計劃。   

明年年初,微軟將會推出Windows Mobile 6.1,這是Windows Mobile 6的一個更新版本,還將包括一些介面上的改進。下一個計劃就是Windows Mobile 7了,這個版本將包括比例、縮放功能,以及一套新的Windows Mobile應用程式,包括:Internet Explorer,郵件客戶端,簡訊工具和照片音樂管理工具。   

Windows Mobile 團隊和 Zune 團隊的協作,將會對 Windows Mobile 系統整體的多媒體體驗產生重要的意義。另外,Mary Jo Foley 聽說,微軟正在開發一套跨多個平臺(WIndows Mobile, Zune, Xbox 360,還可能 Microsoft TV)的Windows Live服務,之後就是Windows Mobile 8了.   總的來說,Windows Mobile 8將會包括一套完全重新設計的使用者介面,以及大量的"革命性"功能。

但微軟 Windows Mobile系統會在互聯網體驗方面,趕超蘋果的iPhone嗎?Google 涉足手機平臺領域,是否會再一次加快微軟在其手機作業系統上的 Windows Live, Live Search, MSN 和廣告平臺,以及 Silverlight 等技術的全面應用?讓我們拭目以待

常用軟體下載 !!

常用軟體下載 !!

引用:http://briian.com/?p=1271

以下列出一些不來恩自己比較喜歡或比較常用的軟體,絕大部分是免費軟體,少部份付費軟體需自備序號或購買授權。以下簡單整理一下,方便大家重灌後下載來裝。若有版本太舊的,請再回報。
說明: 按一下左邊的軟體名稱可開啟該軟體的官方網站按一下右邊的「下載」可直接將軟體下載回來。如下載網址已過期或版本太舊,請直接連回官方網站尋找新版本。


※ 網路瀏覽器 ※
Firefox 2.0.0.11 繁體中文版下載 (18個外掛, 32個搜尋)
Opera 9.25 中文版下載教學
Internet Explorer 7.0下載
Sleipnir 2.60中文版下載
Maxthon (MyIE) 2.0.6.9024下載繁體中文語系

※ 即時通訊軟體 ※
MSN Messenger 7.5下載全部版本
Windows Live Messenger 8.1下載
Windows Live Messenger 2008 (MSN 8.5) 下載
Microsoft Messenger for Mac 6.0.3下載

Yahoo!奇摩即時通 8.1下載
Yahoo!奇摩即時通 9.0下載

Skype 3.6.0.244 中文版下載
Google Talk 1.0.0.104中文版下載
ICQ 5.1 中文版下載
騰訊QQ 2006b2 繁體中文版下載

※ 防毒軟體 ※
卡巴斯基 KAV 7.0 繁體中文版下載 (需自備序號)
卡巴斯基 KIS 7.0 繁體中文版下載(需自備序號)

NOD32 2.70.39 繁體中文版下載 (30天試用版)
PC-cillin Internet Security 2008 試用版下載
avast! antivirus 4.7 繁體中文版下載 (免費防毒軟體, 安裝教學
Avira AntiVir PersonalEdition Classic 7.06下載(免費防毒軟體)
Windows Defender beta2下載

※ 中文輸入法 ※
自然輸入 8 專業版下載 (請自行購買序號)
新酷音輸入法0.3.4.5下載 (免費,相關文章
微軟新注音輸入法2003下載
微軟新倉頡輸入法2003下載
嘸蝦米6.0多國語言試用版下載(支援Win 2000/XP/Vista)

※ 文書處理 ※
Adobe (Acrobat) Reader 8.1下載 (PDF閱讀器)
PDF X-Change Viewer 1.029下載 (PDF閱讀器, 軟體介紹
Foxit Reader 2.2下載 (PDF閱讀器)
Microsoft Office 免費文件閱讀器Word Excel PowerPoint

EmEditor純文字編輯器 6.00.4免費版下載
UltraEdit純文字編輯器 13.20a下載 (需自備軟體序號)
馴碼快手 20050305下載(繁簡轉換, 請看教學
ConvertZ 8.02下載(繁簡轉換)

※ P2P、下載工具 ※
eMule 0.48a下載
BitComet 0.97下載 (下載BT用的)
µTorrent 1.7.5下載 (下載BT用的)
FlashGet 1.9.4繁體中文版下載
Orbit 2.4.3多國語言版下載 (可下載YouTube影片, 請看教學

FileZilla 3.0.41 繁體中文版下載 (免費FTP軟體, 請看教學
FlashFXP 3.40 試用版下載

※ 多媒體播放 ※
千千靜聽 5.10 繁體中文版下載換面板教學
KMPlayer 2.9.3.1428 影音播放器下載 (中文, 請看教學
RealPlayer 11.0繁體中文版下載 (播rm, RMVB影片用)
QuickTime 7.3.1 繁體中文版下載 (播mov影片用)
PowerDVD 7 中文版下載 (30天試用版)

Codec Pack All in 1 6.0.3.0下載 (多合一影音解碼器)
Real Alternative 1.70下載 (rm, RMVB的影音解碼器)

※ 看圖、繪圖軟體 ※
IrfanView 4.10 免費看圖軟體下載 (繁體中文語系)
Xn View 1.92 免費看圖軟體下載 (另有Mac、Linux版本)
ACDSee 10.0 繁體中文版下載(試用版)

Paint.NET v3.20 免費繪圖軟體下載(簡體中文+英文多國語系)
GIMP 2.4免費繪圖軟體下載 (繁體中文, GNU授權)
PhotoCap 4.01下載 (全中文、免費影像處理軟體)

※ 壓縮軟體、系統工具 ※
WinRAR 3.71 繁體中文版下載軟體教學
WinZIP 11.1 英文版下載
7-ZIP 壓縮軟體下載

TweakUI 2.10繁體中文版下載應用與教學
Microsoft .NET Framework 3.0 可轉散發套件下載
Sun JAVA 虛擬機器 v.6 update3下載
Microsoft Java 虛擬機器下載
Keyfinder v2.0 beta3下載 (教學:如何修改XP、Vista序號)

提高 Silverlight 應用程式性能


提高 Silverlight 應用程式性能


本文講述使 Microsoft Silverlight 應用程式快速、流暢執行的性能小提示。

主要性能提示:

多種平台和瀏覽器上的測試
在開發期間將 EnableFrameRateCounter 設定為 true
Silverlight 外掛盡量少用透明背景
使用 Silverlight 動畫,而不是自己建立每影格組成的動畫
避免對文字大小使用動畫
避免使用 Windowless(無視窗)模式
將可能使用可見性而不使用不透明度
Silverlight 使用多核呈現和媒體回放
在全螢幕模式下,隱藏不用的對象
不要對 MediaElement 對像使用 Width 和 Height 屬性
不要對 Path 對像使用 Width 和 Height 屬性
當 Downloader(下載器) 結束時,分離事件並設定為 null
將 CPU 密集的工作拆分成更小的任務


多種平台和瀏覽器上的測試


如果你正在為多種操作系統(例如 Macintosh 和 Windows)和多種瀏覽器(例如Microsoft Internet Explorer、Mozilla FireFox 和 Apple Safari)開發基於 Silverlight 的應用程式,千萬要記住使用你要部署的操作系統和瀏覽器進行一般測試。不同系統和瀏覽器之間行為的不同和 Silverlight 處理這些行為的程式碼會影響程式性能。尤其是你的應用程式有嵌入的透明背景外掛和使用大量 JavaScript 程式碼的時候,應當進行全面測試。

在開發期間將 EnableFrameRateCounter 設定為 true


外掛的呈現性能隨指定的宿主參數和內容的複雜程度而變化。我們推薦你在程式開發期間將 EnableFrameRateCounter 屬性設定為 true,這個設定將在瀏覽器的狀態欄裡顯示呈現的 Silverlight 內容的影格速率(fps,frames-per-second),這樣,你就能為你的應用程式調優。

Silverlight 外掛盡量少用透明背景


透明背景或許是很有用的,例如,當你嵌入的 Silverlight 外掛包含一個非矩形的形狀如汽車的照片時,你不想顯示汽車周圍的矩形內容。你可以設定透明的 Silverlight 外掛背景只讓汽車的圖片顯示出來。然而,使用透明的 Silverlight 外掛背景對性能有重大影響,因此,應盡可能地避免使用這種功能。

使用 Silverlight 動畫而不是自己建立每影格組成的動畫


使用 Silverlight 外掛內嵌的動畫比你使用 JavaScript 建立自己的每影格動畫要快的多。 隨時間推移使用元素樹的推薦做法是使用動畫系統。這種方法是與平台和瀏覽器無關的,並且是最有效的。

避免對文字大小使用動畫


對文字大小進行設定動畫潛在地會使用大量系統資源。這是因為 Silverlight 在呈現文字時使用 hinting(字體微調) 平滑文字技術。如果如果對文字大小設定動畫(通過 Transform 對像或者 FontSize 屬性), Silverlight 對每影格都進行微調,這會導致資源的浪費,也可能會導致影格的丟失。 如果你的程式需要動態修改文字大小,最好使用向量圖形代替文字。

避免使用 Windowless(無視窗)模式


只在必要時才設定 Windowless 屬性為 true ,Windowless 模式是很費資源的,可能導致動畫的破裂。

盡可能使用 Visibility(可視性) 而不使用 Opacity(不透明度)


如果你想簡單地讓對象可見或不可見而不是使用部分不透明度或者淡出淡入對象,請使用 Visibility 屬性而不使用 Opacity 屬性。Opacity 意味著較高的代價,這是因為,對像仍然是可點選的,並且需要呈現。將 Visibility 設定為 Collapsed 可避免這些問題。

Silverlight 使用多核呈現和媒體回放


Silverlight 利用多核的優點進行內容呈現和媒體回放。因此,你的 Silverlight 程式在多核系統上表現得會更好。

在全螢幕模式下,隱藏不用的對象


當程式進入到全螢幕模式時,隱藏所有在全螢幕模式下不需要呈現的對象,或者從元素樹中斷開

他們。你可以將對象的 Visibility 屬性設定為 Collapsed。

不要使用 MediaElement 對象的 Width 和 Height 屬性


盡量避免明確設定 MediaElement 對象的 width 和 height 屬性。相反,讓媒體元素以它原本的大小顯示,如果你需要這些元素的顯示大小,最好使用媒體編碼工具重新將媒體編碼成期望的大小。

不要使用 Path 對象的 Width 和 Height 屬性


不要設定 Path 對象的 Width 和 Height 屬性。設定這些屬性會導致額外的拉伸,影響性能。相反,明確設定 Path 對象的座標控制它的形狀和位置。

當 Downloader(下載器)完成時,分離對象並設定為 null


當你使用 Downloader 對像時,當 Completed 事件觸發後,分離掉 Downloader 的所有事件處理器,然後將 Downloader 設定為 null。

將 CPU 密集的工作切分成更小的任務


當 JavaScript 執行時,外掛停止呈現。通常,在事件處理器中做點少量的工作時,這不是什麼問題。然而,如果你的程式需要在 JavaScript 線程上執行大量的CPU 密集的工作,我們建議你將這個工作劃分為更小的任務。這將會保持期望的影格速率進行呈現。

Balder 3D Engine for Silverlight

Balder 3D Engine for Silverlight

Balder 3D Engine for Silverlight是以Silverlight 1.1為基礎打造的,並且是Open Source!!

http://www.codeplex.com/Balder
3D 很可能是很多人選擇 Silverlight 的第一個誘因,不妨看看 Silverlight / WPF 在 3D 方面的應用表現

華碩與神舟的低價大戰


華碩與神舟的低價大戰

華碩的易PC(eeepc)炒熱了新聞,大家都驚覺隨身電腦可以這麼輕巧與便宜,但他們的實際功能是什麼,可以做到什麼事情,好像很多人不是那麼瞭解

但不管瞭解與否,很多同事想要一台,原因無他:只是幻想自己會帶著他到處辦公,雖然在我看來,這些想購買者並不是會經常上網的人(至少下班後都不在網路上),是否會帶著電腦到處辦公,我個人持強烈的保留態度。

但不管如何,這場戲卻很有趣,也很好看,華碩易PC的低價,也喚起了大陸 神舟電腦的「回應」,同樣地推出低價筆電,神舟2999與華碩的2499之戰,看來精彩可期,我個人非常願意繼續觀賞下去,呵呵~

來看一下這兩款對戰的產品吧:

人民幣2999元,神舟低價筆記本Q540X優缺點分析
網友:半個月華碩易PC使用感受
2499元人民幣的易PC
預告:1999元人民幣的筆電


本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw/

什麼是 Silverlight Streaming ?

什麼是 Silverlight Streaming ?

http://silverlight।live.com/

Microsoft® Silverlight™ Streaming by Windows Live™ is a companion service for Silverlight that makes it easier for developers and designers to deliver and scale rich media as part of their Silverlight applications। The service offers web designers and developers a free and convenient solution for hosting and streaming cross-platform, cross-browser media experiences and rich interactive applications that run on Windows™ and Mac. Combined with the ability to create content with Microsoft® Expression Studio and other 3rd party tools, Web designers and content publishers wishing to integrate Silverlight applications into their online properties can enjoy complete control of the end user experience.

還有免費的4GB空間可以申請
http://silverlight.live.com/account/create.aspx


Silverlight Streaming 案例 DEMO

Halo 3 Interactive Game ManualBefore you play the game, master all the controls, weapons, and gameplay modes in the Halo 3 Interactive Game Manual.

Partner-TV: Telling it how it isPartner-TV provides Sales, Marketing and Technical information to Microsoft’s Partners throughout the UK and beyond.

Roxio BuzzRoxio Buzz makes publishing video clips and photo-slideshows to the Web fun and easy, now updated with support for Silverlight Streaming।

一些相關資源

About Silverlight Streaming: To learn more about the benefits of Microsoft® Silverlight™ Streaming by Windows Live™, visit the Silverlight Streaming page on microsoft.com/silverlight.

For Developers and Designers: To learn more about how to program Microsoft® Silverlight™ Streaming by Windows Live™ please review the SDK on dev.live.com/silverlight.

Learn about Microsoft Silverlight: Explore the possibilities of Microsoft® Silverlight™, a cross-browser, cross-platform plug-in for delivering the next generation of media experiences and rich interactive applications (RIAs) for the Web, visit microsoft.com/silverlight.

使用上若有疑問,也可以參考這邊的設定玩玩Silverlight streaming


http://61.30.28.35/ajun/archive/2007/06/20/51452.aspx
如果你裝了Microsoft Expression Media Encoder Preview後卻發現沒有template的話主要是語系的問題,直接將安裝資料夾中的Template\en的資料夾複製一份並命名為zh-tw(如果你的是繁體中文的作業系統的話),(Template放置的資料夾 : C:\Program Files\Microsoft Expression\Media Encoder 1.0\Templates\en)

manifest.xml

StartWithParentMicrosoftAjax।jsPreviewMedia।jsEmePlayer.jsplayer.jsstartPlayer.js


期待Silverlight 1.1

期待Silverlight 1.1

轉載自: 賴榮樞

微軟日前正式發表Silverlight 1.0,並且展示了很多利用Silverlight 1.0技術的商業網站,例如MLB網站的影片,和微軟的Halo 3預覽網站HD版)、Tafiti.comMSN Podium '08

微軟沒有忘記必須讓Silverlight跨平台、跨網頁瀏覽器,因此Silverlight的runtime不僅有Windows和Mac版本,也會有Linux版,而Mono專案團隊將會負責實作開放源碼版的Silverlight 1.0和1.1;開放源碼版本的Silverlight的專案代號是Moonlight。Mono是由Novell贊助的Linux版।NET平台,有趣的是專案代號Moonlight。如何有趣?一是銀光、一是月光;再者,把Mono的最後兩個字母調換就變成Moon了不是嗎?Moonlight不僅能在Linux套件執行,而且將支援Firefox、Konqueror、Opera。再者,Moonlight 1.0會如同Silverlight 1.0支援JavaScript程式開發架構,而Moonlight 1.1則會向Silverlight 1.1完整支援.NET架構。

隨著1।0的推出,微軟也正加快Silverlight 1.1的開發。Silverlight 1.1將會包含跨平台版本的.NET Framework,支援WPF的UI開發架構(包括可擴充的控制項架構、版面配置的管理、資料繫結、控制項面板、更多內建的控制項)。Silverlight 1.1也包含了目前開發人員使用的完整.NET Frameworkr基底類別庫的子集,能支援集合、泛型、IO、HTML DOM、XML、本機儲存、LINQ,以及sockets、Web Services、REST等網路功能。包含跨平台版本的.NET Framework,意味著開發人員可以利用任何.NET語言(VB、C#、JavaScript、Python、Ruby等等)來開發Silverlight程式。

目前如果想要開發Silverlight 1.0的程式,可以利用任何的文字編輯器-_-;或者以Visual Studio 2008/Visual Web Developer Express 2008 Beta 2搭配JavaScript Intellisense for Silverlight 1.0(這比利用文字編輯器hard coding方便許多)。

如果現在就已經著眼於Silverlight 1.1,可以下載Silverlight Tools for Visual Studio 2008 Alpha和Express Blend Preview。參考資料
Silverlight 1.0 Released and Silverlight for Linux Announced / Scott Guthrie
Microsoft/Novell Collaboration on Silverlight / Miguel de Icaza

Silverlight 完全中文解決方案

Silverlight 完全中文解決方案

作者:黃忠成

問題的起源
如你所知,Silverlight 具備相當完善的 2D 向量繪圖及動畫能力,而且擁有了通往 RIA 世界最重要的完整程式架構支援,但是一旦想將其應用在實務的網頁開發上時,你馬上會陷入到 Silverlight 目前無法顯示中文的窘境之中!!事實上,Silverlight 在顯示中文上並沒有問題,只是其 Runtime 並未內建中文字型,導致所有的中文字都會因缺乏字型的緣故而顯示成一個個的小方框,解決這個問題的方案也不是沒有,本文就一一細數目前在 Silverligh 上顯示中文的解決方案。

解法一:下載字型或是 ODTTF(XPS)
雖然 Silverlight Runtime 中未內建中文字型,不過倒是提供了字型下載的功能,Silverlight Runtime 支援 TTF 及 ODTTF(XPS) 等兩種字型,我們可以使用 Downloader 物件來下載包含字型的 ZIP 檔案,然後以 setFontSource 函式將字型指定給 TextBlock,如此便能顯示中文字了,詳細的做法可以參考 Silverlight SDK 的說明文件。但如你所知的,字型本身有著授權的問題,你不能下載未經授權的字型到客戶端,這意味著除非微軟同意,否則我們不能在網站上提供如 Windows 之細明體、標楷體等字型下載,當然!轉成 XPS 後所粹取出的 ODTTF 也是受到同樣限制的。

解法二:Path
微軟的周旺暾先生提出了下載字型外的另一種解法,那就是使用 Path 物件,他提出了兩種使用 Path 物件來顯示中文的方法,一是使用 Blend 將中文直接轉成 Path,這個方法的確可行,但只適用於靜態字之顯示。二是於網站伺服器上安裝 .NET Framework 3.0,利用 WPF API 動態將指定文字轉成 Path 後回傳給客戶端,此法可適用於靜態或是動態之文字顯示,詳細請參考旺暾兄之 Blog:http://blogs.msdn.com/wtchou/

解法三:圖型
圖形解法是我於前幾個月所提出的解法,簡單的說就是在伺服器端將文字輸出成圖形,回傳至客戶端指定給 Image 物件來顯示中文,詳細請參考我的 Blog:http://blog.csdn.net/Code6421/archive/2007/08/09/1733745.aspx

為何不在 Runtime 內嵌中文字型?
老實說,除了下載字型外,使用 Path 或是圖形都只能算暫解燃眉之急的解法,畢竟 TextBlock 控件才是 Silverlight 用來顯示文字的主要控件,以 Path 來說,雖然支援換行上不是問題,但是若要兩行顏色或是字體不同,那就傷腦筋了!圖形也有著同樣的問題,如何算出輸出文字後圖形的大小,頁面上又該如何調配都是問題,即使能夠克服,也必須花上不少時間!總歸一句話,只要 Silverlight Runtime 內嵌中文字型,一切的問題都迎刃而解,但這樣一來,Silverlight Runtime 就不可能低於 2MB,畢竟中文字博大精深,每個字型檔少說都要 8~9MB,就算用 ZIP 壓縮後也要 4~5MB,更不用談要支援繁簡兩種字型了,若再將其它語系算進去的話,那這個 Runtime 可以說是大怪物一隻了,別忘了!Silverlight Runtime 是要能夠執行於所有語系之系統上的!因此,Silverlight Runtime 內嵌中文字型的方式在實務上是不可行的,那又該如何是好呢?我認為應該循視情況下載字型的方向走,當觀看一個繁體中文的 Silverlight 網頁時,若使用者的 Silverlight Runtime 未下載所需要的字型,那麼就提示該使用者並自動由某一網站下載字型,這個某一網站可以是開發者的,也可以是微軟的,不過!這個假設建立在一個前題之下,那就是下載字型的動作必須是合法的。

評估使用免費字型的可能性
好了!你現在應該由抱怨微軟不在 Silverlight Runtime 內嵌中文字型慢慢轉成抱怨微軟不在推出 Silverlight Runtime 時開放某些中文字型的授權了,事實上!就我所得到的消息,微軟目前正在研擬修改字型授權,未來各位可能可以將某些特定字型放在 Silverlight 網站上供人下載或是由微軟網站下載而不觸法,但是處理這件事需要一些時間,誰也說不準得花上多久。在這之前,除了使用 Path 或圖形外,我們也可以朝向找尋完全免費授權之免費字型的方向前進,目前筆者能找到的、並確定能使用在 Silverlgiht 的免費中文字型如下:

王漢宗老師:http://briian.com/?p=290
吳老師:ftp://cle.linux.org.tw/pub2/fonts/cwttf/center
文鼎捐贈給自由軟體界的四套字: http://cle.linux.org.tw/fonts/Arphic/
PS:內含兩套簡體字。
雖然王漢宗老師所提供的字型較多且完整,但因為與文鼎有一些法律上的糾紛待處理,所以若你是要用於商業網站上,還是建議使用吳老師或是文鼎所提供的字型,另外!請特別注意一點,Silverlight 的 FontFamily 必須使用英文名稱,以文鼎 PL 中楷來說,FontFamily 必須設定為【AR PL KaitiM Big5】。

當字型、授權不是問題時
OK,現在字型及授權都不是問題了,問題在於你還是得寫下一些 JavaScript 程式碼,使用 Downloader 物件來下載需要的字型,並設定給 TextBlock,這雖然不難,但就是有點繁瑣,基於前次開發 Silverlight DataBindings 技術的經驗,我設計了一組 JavaScript Library 來協助各位更容易的在 Silverlight 上顯示中文。

方便的 JavaScript Library : FontHelper
FontHelper 提供了 Font Bindings 技術,讓你可以直接於 XAM L之 TextBlock 的 Tag 中指定要使用何種字型,如下例:





【DBCS】是 FontHelper 辨識該 TextBlock 是否需要下載字型的關鍵字,【:】號之後的是字型壓縮檔的檔名,此檔案必須放在 Silverlight 網站下,以本例來說是放在網站的根目錄下,【;】後的是修飾字,FontHelper 支援使用者指定一個 default 字型,以本例來說,接下來的 TextBlock 只要以下例方式宣告,就可直接使用 cwkai.zip 的字型。





當呼叫了 FontHelper 物件的 initialize 函式後,其將會搜尋頁面上的 TextBlock 控件,並一一為其下載需要的字型,那麼何時呼叫 initialize 函式呢?在這之前你得先引用 SLFH.js 到你的 Silverlight 網頁中 (此檔可於範例檔中的 SilverlightJSApplication1 或是 SilverlightJSApplication2 等目錄中找到),如下例:

Default.html





SilverlightJSApplication1
















然後在 handleLoad 事件中建立 FontHelper 並呼叫 initialize 函式,如下例:

.xaml.js


handleLoad: function(plugIn, userContext, rootElement)
{
this.plugIn = plugIn;
this.button = rootElement.children.getItem(0);
//建立Font Helper 物件
this.fh = new SilverlightHelper.FontHelper(rootElement);
//呼叫initialize函式,掃描Page 上所有的TextBlock控件,並自動下載字型
this.fh.initialize();;
}


這是靜態字型的使用方式,倘若我想在 JavaScript 中直接使用其它字型呢?FontHelper 提供了 setTextWithFont 函式能幫你達到這個需求。

.xaml.js


//呼叫setTextWithFont來設定TextBlock的字型及文字
//參數:
// setTextWithFont(,<要設定的文字>,<下載的字型>,<字型的FontFamily名稱>)
//
//PS: setTextWithFont不會重覆下載已經下載過的字型!!
this.fh.setTextWithFont(sender.findName("DynamicText"),
"我是動態設置的字","cwfs.zip","cwTeXFangSong");


setTextWithFont 會幫你下載指定的字型到客戶端,並設定指定的文字及 FontFamily,更好的是她會顯示 目前字型的下載進度於畫面上。好了,了解 FontHelper 的大概使用方法後,下面是個實際的例子,你可以在範例壓縮檔中的 SilverlightJSApplication1 目錄中找到這些檔案。

Default.html





SilverlightJSApplication1














Default.html.js


function createSilverlight()
{
var scene = new SilverlightJSApplication1.Scene();
Silverlight.createObjectEx({
source: 'Scene.sxaml',
parentElement: document.getElementById('SilverlightPlugInHost'),
id: 'SilverlightPlugIn',
properties: {
width: '400',
height: '400',
background:'#ffffffff',
isWindowless: 'false',
version: '0.8'
},
events: {
onError: null,
onLoad: Silverlight.createDelegate(scene, scene.handleLoad)
},
context: null
});
}

if (!window.Silverlight)
window.Silverlight = {};

Silverlight.createDelegate = function(instance, method) {
return function() {
return method.apply(instance, arguments);
}
}


Scene.xaml





Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />




Width="120" Height="44" Stroke="#46000000">







Canvas.Left="17" Canvas.Top="12" Foreground="#FFEFEFEF" Text="我是中文"
FontFamily="cwTeXKai" FontSize="24" Tag="DBCS:cwkai.zip;default" />
FontSize="26" Text="格式化中文測試" Tag="DBCS:default">


FontHelper 完全支援 TextBlock的Run指令



斜體目前仍無法處理



粗體字也無法處理



Canvas.Top="280"
FontFamily="cwTeXKai"
FontSize="42"
Tag="DBCS:default">
漸層中文字















Fill="#00FFFFFF" Name="highlightEllipse" Canvas.Left="3" Canvas.Top="3"/>




Scene.xml.js


if (!window.SilverlightJSApplication1)
window.SilverlightJSApplication1 = {};


SilverlightJSApplication1.Scene = function()
{
}

SilverlightJSApplication1.Scene.prototype =
{
handleLoad: function(plugIn, userContext, rootElement)
{
this.plugIn = plugIn;
this.button = rootElement.children.getItem(0);

this.button.addEventListener("MouseEnter",
Silverlight.createDelegate(this, this.handleMouseEnter));
this.button.addEventListener("MouseLeftButtonDown",
Silverlight.createDelegate(this, this.handleMouseDown));
this.button.addEventListener("MouseLeftButtonUp",
Silverlight.createDelegate(this, this.handleMouseUp));
this.button.addEventListener("MouseLeave",
Silverlight.createDelegate(this, this.handleMouseLeave));

//建立Font Helper 物件
this.fh = new SilverlightHelper.FontHelper(rootElement);
//呼叫initialize函式,掃描Page 上所有的TextBlock控件,並自動下載字型
this.fh.initialize();;
},

// Sample event handlers
handleMouseEnter: function(sender, eventArgs)
{
// The following code shows how to find an element by name and call a method on it.
var mouseEnterAnimation = sender.findName("mouseEnter");
mouseEnterAnimation.begin();
},

handleMouseDown: function(sender, eventArgs)
{
var mouseDownAnimation = sender.findName("mouseDown");
mouseDownAnimation.begin();
},

handleMouseUp: function(sender, eventArgs)
{
var mouseUpAnimation = sender.findName("mouseUp");
mouseUpAnimation.begin();

// Put clicked logic here
alert("clicked");
//呼叫setTextWithFont來設定TextBlock的字型及文字
//參數:
// setTextWithFont(,<要設定的文字>,<下載的字型>,<字型的FontFamily名稱>)
//
//PS: setTextWithFont不會重覆下載已經下載過的字型!!
this.fh.setTextWithFont(sender.findName("DynamicText"),
"我是動態設置的字","cwfs.zip","cwTeXFangSong");
},

handleMouseLeave: function(sender, eventArgs)
{
var mouseLeaveAnimation = sender.findName("mouseLeave");
mouseLeaveAnimation.begin();
}
}


下圖是執行畫面。



點選按鈕後的畫面。



PS:目前 Silverlight Runtime 1.0 似乎有著一個 Bug,那就是在設定 setFontSource 後, 如粗體、斜體等修飾樣式都將無法使用,即使強制再設定也一樣,此問題不僅發生在中文字型,英文字也一樣。

當字型大小成為問題時
有了 FontHelper 及免費字型的幫忙,相信在你的 Silverlight 網站上使用中文已經不是大問題了,現在的問題是變成是字型檔大小,先讓我們看一下前例於 FireFox 上執行時的流量。



很可怕是吧,這樣一個網頁要價 6.98MB,其實光是字型檔就得要 6.95MB 了,對多數用戶來說,這是無法承受的沉重負擔!

使用 ODTTF
如果字型大小對你或是客戶而言是一個困擾的話 (大部份是),那麼 ODTTF 檔案可能會是解決方案之一,當你的電腦上安裝了 .NET Framework 3.0 時,其順便也為你安裝了 XPS Document Writer 工具,此工具以虛擬印表機的方式呈現,她可以讓你將 Word 檔案輸出成 XPS 檔案,一旦有了這個 XPS 檔案後,我們便可以由其中粹取 ODTTF 檔,這個 ODTTF 檔中包含了該 Word 檔案中所使用的字型,與 TTF 不同,ODTTF 中僅包含用到的字型,所以檔案自然小上許多。以將前例來說,首先我們必須將需要的字型安裝到 Windows 系統中,請以檔案總管開啟 Windows\Fonts 資料夾,由選單之檔案|安裝新字型來安裝所需要的字型:





接著準備一個 Word 檔案,內容如下,請注意!字體要選擇所需要的。





完成後選擇列印。



點選確定後選擇存檔位置。



待輸出完成後,請該檔案之副檔名由 .xps 改成 .zip,解壓後可於其中找到 .ODTTF 的檔案。



將這三個檔案再壓縮成一個 zip 檔案,將檔名取為 partialFonts.zip,放到 SilverlightJSApplication1 的目錄下,然後修改 Sence.xaml 及 Sence.xaml.js 如下。

Sence.xaml





Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />




Height="44" Stroke="#46000000">







Canvas.Top="12" Foreground="#FFEFEFEF" Text="我是中文"
FontFamily="cwTeXKai" FontSize="24" Tag="DBCS:partialFonts.zip;default" />
FontSize="26" Text="格式化中文測試" Tag="DBCS:default">


FontHelper 完全支援 TextBlock的Run指令



斜體目前仍無法處理



粗體字也無法處理



Canvas.Top="280"
FontFamily="cwTeXKai"
FontSize="42"
Tag="DBCS:default">
漸層中文字















Fill="#00FFFFFF" Name="highlightEllipse" Canvas.Left="3" Canvas.Top="3"/>





Sence.xaml.js


if (!window.SilverlightJSApplication1)
window.SilverlightJSApplication1 = {};


SilverlightJSApplication1.Scene = function()
{
}

SilverlightJSApplication1.Scene.prototype =
{
handleLoad: function(plugIn, userContext, rootElement)
{
this.plugIn = plugIn;
this.button = rootElement.children.getItem(0);

this.button.addEventListener("MouseEnter",
Silverlight.createDelegate(this, this.handleMouseEnter));
this.button.addEventListener("MouseLeftButtonDown",
Silverlight.createDelegate(this, this.handleMouseDown));
this.button.addEventListener("MouseLeftButtonUp",
Silverlight.createDelegate(this, this.handleMouseUp));
this.button.addEventListener("MouseLeave",
Silverlight.createDelegate(this, this.handleMouseLeave));

//建立Font Helper 物件
this.fh = new SilverlightHelper.FontHelper(rootElement);
//呼叫initialize函式,掃描Page 上所有的TextBlock控件,並自動下載字型
this.fh.initialize();;
},

// Sample event handlers
handleMouseEnter: function(sender, eventArgs)
{
// The following code shows how to find an element by name and call a method on it.
var mouseEnterAnimation = sender.findName("mouseEnter");
mouseEnterAnimation.begin();
},

handleMouseDown: function(sender, eventArgs)
{
var mouseDownAnimation = sender.findName("mouseDown");
mouseDownAnimation.begin();
},

handleMouseUp: function(sender, eventArgs)
{
var mouseUpAnimation = sender.findName("mouseUp");
mouseUpAnimation.begin();

// Put clicked logic here
alert("clicked");
//呼叫setTextWithFont來設定TextBlock的字型及文字
//參數:
// setTextWithFont(,<要設定的文字>,<下載的字型>,<字型的FontFamily名稱>)
//
//PS: setTextWithFont不會重覆下載已經下載過的字型!!
//this.fh.setTextWithFont(sender.findName("DynamicText"),
//"我是動態設置的字","cwfs.zip","cwTeXFangSong");
this.fh.setTextWithFont(sender.findName("DynamicText"),
"我是動態設置的字","partialFonts.zip","cwTeXFangSong");
},

handleMouseLeave: function(sender, eventArgs)
{
var mouseLeaveAnimation = sender.findName("mouseLeave");
mouseLeaveAnimation.begin();
}
}



完成後執行,使用 FireFox 的流量分析如下所示。



只需 67KB,很戲劇化的結果是吧。

字型部份下載:XPS Font Service
使用 ODTTF 的優點是字型檔較小,缺點則是必須仰賴 Word 及 XPS Document Writer 來製作 ODTTF 檔案,在需要由資料庫或是與使用者互動來動態顯示中文字的應用上,這種解法就完全不適用了!當然,你可以事先準備較多的中文字,但這畢竟不是 100% 完整的解法!!那麼到頭來還是得下載所有字型了嗎?不見得!我們能用WPF將字轉成 Path,當然也能如法泡製將字轉成 XPS,然後粹取出 ODTTF 後壓縮回傳到客戶端,當然!前題得先在網站伺服器上安裝 .NET Framework 3.0,下面列出 Font Services 及使用她的 GetFontsXPS.aspx、及 ZIP 壓縮解壓縮部份 (此處使用 SharpZipLib 這個免費的 Zip 物件庫,可以在 http://www.icsharpcode.net/OpenSource/SharpZipLib/ 取得) 的原始碼,你可以在範例壓縮檔的 SilverlightJSApplication2 中找到她們。

FontServces.cs


using System;
using System.ComponentModel;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Windows;
using System.Globalization;
using System.Windows.Media;
using System.IO.Packaging;
using System.IO;
using System.Windows.Xps;
using System.Printing;
using System.Windows.Xps.Packaging;
using System.Text;
using System.Reflection;
using System.Security.Permissions;

public class FontService
{
private static Dictionary _fontMapping = new Dictionary();

static FontService()
{
//王老師的字型(由於與文鼎有些爭議未決,建議多使用吳老師的)
_fontMapping.Add("HanWangMingLight", "王漢宗細明體繁");
_fontMapping.Add("HanWangMingMedium", "王漢宗中明體繁");
_fontMapping.Add("HanWang WeiBeiMedium-Gb5", "王漢宗中魏碑簡");
_fontMapping.Add("HanWang FangSongMedium-Gb5", "王漢宗中仿宋簡");
//吳老師的字型
_fontMapping.Add("cwTeXHeiBold", "cwTeXHeiBold");
_fontMapping.Add("cwTeXFangSong", "cwTeXFangSong");
_fontMapping.Add("cwTeXKai", "cwTeXKai");
_fontMapping.Add("cwTeXYen", "cwTeXYen");
_fontMapping.Add("cwTeXMing", "cwTeXMing");
}

//create xps.
private DrawingVisual CreateDrawingVisualText(string formattedText,
string fontName, CultureInfo ci)
{
// Create an instance of a DrawingVisual.
DrawingVisual drawingVisual = new DrawingVisual();

// Retrieve the DrawingContext from the DrawingVisual.
DrawingContext drawingContext = drawingVisual.RenderOpen();

// Draw a formatted text string into the DrawingContext.
drawingContext.DrawText(
new FormattedText(formattedText,
ci,
FlowDirection.LeftToRight,
new Typeface(fontName),
12, Brushes.Black),
new Point(200, 116));

// Close the DrawingContext to persist changes to the DrawingVisual.
drawingContext.Close();
return drawingVisual;
}


private void VisualToXps(string fileName, string formattedText,
string fontName, CultureInfo ci)
{

Package package = Package.Open(fileName, FileMode.Create);
{
XpsDocument doc = new XpsDocument(package, CompressionOption.SuperFast);
{

XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
writer.Write(CreateDrawingVisualText(formattedText, fontName, ci));
}
doc.Close();
}
package.Close();
}


private FileStream BuildFontFont(string formattedText, string fontName, CultureInfo ci)
{
string key = Guid.NewGuid().ToString();
if (!Directory.Exists(HttpRuntime.AppDomainAppPath + "App_Data\\TempFonts"))
Directory.CreateDirectory(HttpRuntime.AppDomainAppPath + "App_Data\\TempFonts");
string basePath = HttpRuntime.AppDomainAppPath + "App_Data\\TempFonts\\";
VisualToXps(basePath + "\\" + key + ".xps", formattedText, fontName, ci);
Compression.UnZipClass unZip = new Compression.UnZipClass();
string fileName = unZip.UnZip(basePath + "\\" + key + ".xps", basePath);
File.Delete(basePath + "\\" + key + ".xps");
Compression.ZipClass Zip = new Compression.ZipClass();
Zip.ZipFile(fileName, HttpRuntime.AppDomainAppPath + "CachedFonts\\" +
key + ".zip", 8, 8192);
File.Delete(fileName);
return new FileStream(HttpRuntime.AppDomainAppPath + "CachedFonts\\" +
key + ".zip", FileMode.Open, FileAccess.Read);
}

private void DeleteOutDateFonts()
{
foreach (string item in Directory.GetFiles(
HttpRuntime.AppDomainAppPath + "CachedFonts\\"))
{
DateTime dt = File.GetCreationTime(item);
TimeSpan ts = DateTime.Now - dt;
if (ts.Hours > 2)
File.Delete(item);
}
}

public FontService(Page page)
{
page.Load += new EventHandler(page_Load);
}

void page_Load(object sender, EventArgs e)
{
Page page = (Page)sender;
if (!String.IsNullOrEmpty(page.Request.QueryString["FontName"]))
{
DeleteOutDateFonts();
string fontName = page.Request.QueryString["FontName"];
string texts = page.Server.UrlDecode(Encoding.Default.GetString(
Convert.FromBase64String(page.Request.QueryString["Data"])));
if (_fontMapping.ContainsKey(fontName))
fontName = _fontMapping[fontName];
FileStream fs = BuildFontFont(texts, fontName,
CultureInfo.GetCultureInfo("zh-TW"));
fs.Close();
page.Response.Clear();
page.Response.Write("CachedFonts/" + Path.GetFileName(fs.Name));
page.Response.End();
}
}
}



DeCompress.cs


using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Runtime.Serialization.Formatters.Binary;
using System.Web;

using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Checksums;


namespace Compression
{
public class UnZipClass
{
public string UnZip(string fileName,string basePath)
{
string name = string.Empty;
using (FileStream inputStream = new FileStream(fileName,
FileMode.Open, FileAccess.Read))
{
ZipInputStream s = new ZipInputStream(inputStream);

ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
if (directoryName == "Resources")
{
if (!Directory.Exists(
HttpRuntime.AppDomainAppPath + "App_Data\\TempFonts"))
Directory.CreateDirectory(
HttpRuntime.AppDomainAppPath + "App_Data\\TempFonts");
FileStream fs = File.Create(basePath+"\\"+
Path.GetFileName(theEntry.Name));
name = fs.Name;
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
fs.Write(data, 0, size);
else
break;
}
fs.Close();
break;
}
}
s.Close();
}
return name;
}
}


public class ZipClass
{
public void ZipFile(string FileToZip, string ZipedFile,
int CompressionLevel, int BlockSize)
{
FastZip fz = new FastZip();
fz.CreateZip(ZipedFile, Path.GetDirectoryName(FileToZip), false,
Path.GetFileName(FileToZip));
}
}
}



GetFontsXPS.aspx.cs


using System;
using System.ComponentModel;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Windows;
using System.Globalization;
using System.Windows.Media;
using System.IO.Packaging;
using System.IO;
using System.Windows.Xps;
using System.Printing;
using System.Windows.Xps.Packaging;
using System.Text;
using System.Reflection;
using System.Security.Permissions;



public partial class GetFontsXPS : System.Web.UI.Page
{
private FontService _fontServices = null;

public GetFontsXPS()
{
_fontServices = new FontService(this);
}
}



Font Services 的設計是希望透過 ASP.NET 接收客戶端所傳上來的 FontName 及 Data 參數來動態產生 XPS,然後粹取出 ODTTF 後再壓縮後回傳給客戶端,基於必須由 JavaScript 將中文字送上來的緣故,Data 參數必須在 JavaScript 端轉成 Base64 後才能送上來解碼,FontHelper 提供了這些功能。

FontHelper 於 XPS Font Service
FontHelper 支援使用 XPS Font Service,SilverlightJSApplication2 就是使用 XPS Font Service 的例子。

Scene.xaml





Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />


Storyboard.TargetName="highlightEllipse"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" />




Width="120" Height="44" Stroke="#46000000">







Canvas.Top="12" Foreground="#FFEFEFEF" Text="我是中文"
FontFamily="cwTeXKai" FontSize="24" Tag="XPS:GetFontsXPS.aspx?FontName=cwTeXKai" />
Text="格式化中文測試" Tag="XPS:GetFontsXPS.aspx?FontName=cwTeXKai">

FontHelper 完全支援 TextBlock的Run指令

斜體目前仍無法處理

粗體字也無法處理


Canvas.Top="280"
FontFamily="cwTeXKai"
FontSize="42"
Tag="XPS:GetFontsXPS.aspx?FontName=cwTeXKai">
漸層中文字





















Secne.xaml.js


if (!window.SilverlightJSApplication1)
window.SilverlightJSApplication1 = {};


SilverlightJSApplication1.Scene = function()
{
}

SilverlightJSApplication1.Scene.prototype =
{
handleLoad: function(plugIn, userContext, rootElement)
{
this.plugIn = plugIn;
this.rootElement = rootElement;
this.button = rootElement.children.getItem(0);

this.button.addEventListener("MouseEnter",
Silverlight.createDelegate(this, this.handleMouseEnter));
this.button.addEventListener("MouseLeftButtonDown",
Silverlight.createDelegate(this, this.handleMouseDown));
this.button.addEventListener("MouseLeftButtonUp",
Silverlight.createDelegate(this, this.handleMouseUp));
this.button.addEventListener("MouseLeave",
Silverlight.createDelegate(this, this.handleMouseLeave));
var fh = new SilverlightHelper.FontHelper(rootElement);
fh.initialize();
},

// Sample event handlers
handleMouseEnter: function(sender, eventArgs)
{
// The following code shows how to find an element by name and call a method on it.
var mouseEnterAnimation = sender.findName("mouseEnter");
mouseEnterAnimation.begin();
},

handleMouseDown: function(sender, eventArgs)
{
var mouseDownAnimation = sender.findName("mouseDown");
mouseDownAnimation.begin();
var fh = new SilverlightHelper.FontHelper(this.rootElement);
var input = document.getElementById("DyanmicInput");
if(input && input.value && input.value != '')
fh.setTextWithXPS(sender.findName("DynamicText"),input.value,
"GetFontsXPS.aspx?FontName=cwTeXFangSong","cwTeXFangSong");
else
fh.setTextWithXPS(sender.findName("DynamicText"),
"我是動態由JavaScript設定的","GetFontsXPS.aspx?FontName=cwTeXFangSong","cwTeXFangSong");
},

handleMouseUp: function(sender, eventArgs)
{
var mouseUpAnimation = sender.findName("mouseUp");
mouseUpAnimation.begin();

// Put clicked logic here
alert("clicked");
},

handleMouseLeave: function(sender, eventArgs)
{
var mouseLeaveAnimation = sender.findName("mouseLeave");
mouseLeaveAnimation.begin();
}
}



除了靜態文字外,FontHelper 提供了相對於 setTextWithFont 的 setTextWithXPS 函式可供指定動態文字用,如下所示。


handleMouseDown: function(sender, eventArgs)
{
var mouseDownAnimation = sender.findName("mouseDown");
mouseDownAnimation.begin();
var fh = new SilverlightHelper.FontHelper(this.rootElement);
var input = document.getElementById("DyanmicInput");
if(input && input.value && input.value != '')
fh.setTextWithXPS(sender.findName("DynamicText"),input.value,
"GetFontsXPS.aspx?FontName=cwTeXFangSong","cwTeXFangSong");
else
fh.setTextWithXPS(sender.findName("DynamicText"),
"我是動態由JavaScript設定的",
"GetFontsXPS.aspx?FontName=cwTeXFangSong","cwTeXFangSong");
}



下圖是執行範例。



下圖是輸入文字後,再點選 (我是中文) 按鈕後的執行畫面。



PS:請特別注意,你必須將需要的中文字型安裝到 Windows 中方能使用 XPS Font Services。

就這樣!中文不再是 Silverlight 的致命傷!
就這樣,困擾我們多時的 Silverlight 顯示中文問題,在 XPS Font Services 及免費中文字型及 Font Helper Library 的協助下得以完全解決,在此特別感謝吳老師所提供的免費字型!!未來希望微軟也能開放字型授權,屆時我們會有更多的字型可選擇。

Developer Notes
當你使用 Font Binding Helper 時,於下載字型時發生 Download/Network Error,請檢查 TextBlock 之 TAG 設定值,所要求的檔案可能不在目錄中,亦或是要求的字型未安裝至 Windows 系統中 (Use XPS)。
範例檔中的 Font Binding Helper 及 Font Services 最新版本已支援大量字處理,當要顯示的字大於 100 個時,Font Binding Helper 及 Font Servcies 會自動分批下載並整合 (Downloader 在處理長度過長的 URL 會出現錯誤)。
受限於 Cross-Domain 的設計,Font Services (GetFontsXPS.aspx、FontServcies.cs) 必須與 Silverlight 網頁放在同一網站中。
Font Servcies 會將字型檔案產生於 App_Data\TempFonts 及 CachedFonts 目錄中,因此若你想將 Silverlight 網站安裝到 IIS 中,請預先建立這幾個目錄,並設定目錄存取權限 (以 Windows 2003 來說,必須新增 IIS_WPG 為完全授權使用者)。
吳老師的兩個字型 (楷書與仿宋) 位於範例檔中的 SilverlightJSApplication1 目錄中,以 .zip 方式壓縮,若你想使用 XPS Font Service,請自行解壓後安裝到 Windows 字型中。
本文列出之範例程式碼僅是參考,完整請參照範例檔,若有更新,文章將不另行更新。
因 Visual Studio 2005 之 Silverlight XAML Designer 目前與中文有不相容的問題,若你開啟專案後發現 Scene.xaml 中的中文變成亂碼,那麼請由目錄下我所準備的備份檔 backup_xaml.txt 複製回來。
範例檔下載:http://code6421.myweb.hinet.net /SLFH_Samples.zip (19MB)

深度體驗SilverLight

深度體驗SilverLight

原文地址:http://www.riaexpert.cn/2007/08/30/%e4%bd%93%e9%aa%8csilverlight10rc/

雖說silverlight各種嘗鮮版已經出了N多,可是一直沒有時間好好體驗一下這個M$為RIA界帶來的巨大驚喜。曾經沉浸在Ajax中無法自拔,期盼著WPF這個呼之欲出的RIA救世主;漫長的等待中,陰差陽錯的結識了Flex,才發現原來Flash也有爭奪RIA霸主地位的實力。

今天實際使用silverlight開發了一個像素畫的」Hello World」,可以在右邊按鈕選擇畫筆的顏色。源代碼採用javascript編寫(1.0RC也只支持這個了);詳細的內容請看DEMO,截圖如下:

使用過後,發現silverlight如果要作為真正的RIA開發平台,比起flex還說還是有不短的路要走:

1.在1.0RC中,還沒有行程完成的xaml->object,或是object->xaml的機制,也就是說在你的 business logic code中還不能自由的以Class instance的方式來初始化對像;而是使用簡陋的plug.content.createFromXaml(xamlString)來創建一個 UIElement;與我們常用的new Class的實例化方式有較大區別。

2.雖然可以使用vs2005做一些基於IDE的開發,但是這種vs的支持僅限於intellisense功能;而不支持WYSIWYG的開發方式,無法發揮IDE的真正作用,當然這也是目前silverlight framework中缺少對於繼承於UIElement的控件的支持相關的,下面會說到。

3.最不理解的就是,在silverlight發佈之後,M$並沒有緊跟著推出一個基於silverlight的control library,也就是說,如果你要開發一個RIA應用的話,你首先得自己構建一套統一樣式的client control library,你得從按鈕,下拉列表框開始開發;這個對於RIA應用的開發是不可理喻的缺點,也是致命的弱點,雖然這個特性對於很多「大牛」來說,不屑一顧。

4.缺少對於流行RIA應用特性的支持;雖然現在silverlight支持播放流媒體,可是這樣的流媒體僅僅是單向的;silverlight依賴於windows media server的流媒體能力,並不能實現Flash Media Server一樣,client同server端的雙向流媒體通信;同時缺少對於服務器客戶端通信方面的支持,在這個RIA的年代REST和 Webservice顯然是對於多媒體應用無能為力的。

5.目前來說,開發方法非常怪異;與flex和flash中開發方法對比強烈不同,silverlight中混雜了客戶端應用程序與動畫的不同開發方法,讓人無法適從。不過可能未來M$指望用不同的IDE把不同的開發者分開;動畫開發者使用Expression Blend,應用開發者使用VS.net;可是至少在缺少IDE的情況下,真的很怪……

雖然silverlight標榜自己支持multi language,但是如果指望昔日的frontend engineer會使用ruby,python,甚至c#和vb來開發RIA的話,真是天方夜譚,雖然JScript也被CLI支持,但是這個從來就不被看好的孩子,已經面目全非,形同雞肋了;實際上silverlight的多開發語言,並不能取悅開發者;但在這樣的情況下,微軟非但不在 silverlight中強化javascript的作用,反而將其弱化到了silverlight與browser的粘合劑的地步,這點絕對會引來 RIA最大的潛在開發者–ajax developer的唾棄。

再看flex,雖然使用actionscript3,但是這是與javascript同根生的親兄弟,兩者的差別近乎為0;節省了開發者轉向 flex的時間。同時flex有完備的ide,有完備的UI library,可以快速的構建RIA應用;加上易用的Flash Media Server,也就是說一個普通的ajax developer可以很容易的在flex平台上面實現當初在html+javascript平台上無法實現的很多夢想;

綜上,我們也該看到,雖然silverlight有這樣那樣的缺點,但是以M$操作系統的佔有率,silverlight在部署及性能方面佔有極大的優勢,而以M$的開發經驗,完善silverlight的開發環境及體驗也不是很難的事情;這點,大家可以觀察.net如何在java佔領制高點的情況下奪回中小企業用戶市場的案例,很有啟發。

可憐了開發者的我們,還是只能做牆頭草,把兩個平台都摸清,才能有備無患。

sliverlight和flash/flex的唯一區別

[轉] sliverlight和flash/flex的唯一區別,看了這個新專題的很多關於兩者pk的爭論。
包括藍色老大的說法,都沒有說到點子上。
不要去爭論技術!誰也不是弱者,做出來的東西也各有千秋。
決定他們命運的關鍵在哪裡?關鍵在你我的手上!
flash現在有極高的佔有率,一是瀏覽器上,一個是廣大的開發者。
這兩者有著很微妙的關係,瀏覽器上的高佔有率,決定了用戶(我說的是買家,瀏覽者)習慣了什麼,想要什麼。
用戶自然決定了開發者要作些什麼。
而廣大的開發者,則決定了網上流傳的是些什麼東西,而這些又影響了用戶。兩者相輔相成,水漲船高成就了flash的天下。
臥龍鳳雛得其一 而得天下!
而現在silverlight的命運在哪裡 ?瀏覽器的市場變幻莫測,群雄紛爭。開發者呢?哈哈,就是你我了。這樣說,如果這個論壇越來越火,
作silverlight的人越來越多,則silverlight將蠶食flash/flex,甚至...,但如果觀望者多於實踐者,那就仍然是flash/flex的天下了。
所以說,其實他們的命運在你我手上!

Silverlight搶先預覽(2)Silverlight/RIA不只是炫目的動畫效果

轉載自:http://www.ithome.com.tw/itadm/article.php?c=43367

也歡迎到 Silverlight 區 發表大作

Silverlight在技術生態圈上,可以與既有的ASP.NET、ASP.NET AJAX、JavaScript、WCF、WorkFlow等技術整合,這是Flash或Flex不易達到的。

RIA一詞最早是2002年由Adobe(Macromedia)提出,是以Flash提供向量動畫為基礎的展現層技術,目的是增加使用者互動的多媒體經驗;接著2006年Adobe又發表第二代RIA技術開發平臺Flex,帶給企業與市場執行更為快速、令人讚嘆與容易開發的網站體驗。

微軟過去的網頁開發技術中,一直缺乏向量技術的加持,故RIA領域總是被Adobe搶盡光環。為了加速擁抱RIA,微軟今年推出Silverlight競逐RIA寶座,並藉由廣大的.NET企業與開發人口優勢,希望可以征服已導入.NET技術的企業與使用者。

Silverlight在技術生態圈上,可以與既有的ASP.NET、ASP.NET AJAX、JavaScript、WCF、WorkFlow等技術整合,這是Flash或Flex不易達到的,在.NET的勢力範圍內,Adobe的戰力確實稍弱。

不過,在.NET勢力外,Adobe仍具有極強的競爭力。筆者相信Sliverlight RIA與Adobe RIA,必須歷經好幾個世代較勁,才能夠逐漸顯現出何方是RIA技術的王者。

良好的操作介面,效益無窮
在Adobe RIA技術推出近6年之後,世界上出現不少以Flash或Flex技術為基礎的知名網站,使用者只能以「驚艷」二字形容操作的感覺。然而驚艷只是RIA外顯的一個優點,重點在於愉快而舒服的使用者經驗,讓使用者留下極為深刻的印象,如此便是一個成功的RIA網站設計。

雖然上述文字解釋了使用者經驗,但究其字面上意義仍然過於抽象,讓人摸不著使用者經驗所要傳達的真義。讓我們針對「使用者經驗」一詞,抽絲剝繭,一窺玄妙之處,使用者經驗可以導引出三個重大利益,包括:

效率(Performance):造訪一個使用者經驗良好的RIA網站時,由於網站針對使用者經驗設計與改良,因此瀏覽網站的過程與行為模式是經過最佳化的,包括增進使用者對網站的瞭解度、資訊與商品易於尋找、訂購商品容易度、完成任務迅速等,如此使用者可以在最少時間內,訂購商品或完成工作任務,這是高效率的表現。

生產力(Productivity):由於使用者瀏覽或操作的是效率最佳化的網站,進一步可再導引出兩個層面的意義。第一是使用者層面,能夠在最短時間完成商品訂購,也意謂著使用者可以訂購更多商品,或是完成更多任務。第二是企業層面,網站每分鐘服務顧客的數目提升,每分鐘交易數也增加,這便意謂著生產力的提升。

滿意度(Satisfaction):使用者造訪以RIA精神與技術所設計的網站,留下深刻的印象,自然會提高顧客的回流與再次造訪率,甚至會購買更多的商品,造就使用者與企業滿意度雙贏的局面。

「使用者經驗」不是口號,而是有真實的目的,必須達成某些實質的利益提升,才算是成功的RIA網站,否則充其量只能稱之為美麗的Flash或Flex網站。

RIA利益:增加營收,減少成本
然而使用者經驗只是RIA利益中的一環而非全部,企業網站若導入RIA的設計,依不同企業或網站可以有幾種不同面向的利益:

增加營收:以線上交易為主的商業網站,若要增加營收,必須增加更多的交易量、工作任務的完成率、顧客的回流率等。例如五星級渡假飯店Broadmoor的線上訂房系統便是利用RIA的設計,有了顯而易見的資訊與圖片導引,顧客可以清楚地瞭解各種資訊,成功地加速網站與顧客之間的「對話」,顧客在當下就能夠決定,並快速完成線上訂房,訂房率的提升便促使企業的營收增加。

增加獨特性:以向量動畫為基礎的RIA技術,良好設計可以讓網站的瀏覽與操作更為直覺,較HTML更具高度的客製化能力。而令人激賞與驚嘆的網站畫面設計,可以大幅增加RIA網站與非RIA網站之間的差異性,如此便可以有效捕捉客戶的目光,增進企業在使用者心目中獨特的形象與地位。

迷人的使用者經驗:如何有效提升使用者經驗是一門挑戰與藝術,這絕非是簡單而趨向靜態的HTML技術所能夠辦到的,例如Intelligent Finance是一家抵押借款公司,自從在網站提供一個RIA型式的計算機系統供客戶使用後,使用者可以輕易地透過計算機,瞭解複雜的償還計算公式,也能夠簡單而清楚地知道自己應該如何償還,因此其營收便增加了15%。



Intelligent Finance於網站提供RIA的計算機系統,使用者可以輕易地瞭解複雜的償還計算公式,也能夠簡單地知道應該如何償還,因此營收增加了15%。

增進使用者對網站的瞭解:當企業在網站上提供金融、保險與投資等眾多的商品服務時,複雜的商業規則往往令非專業的小老百姓望之卻步,若能透過資訊的重整與最佳化,利用RIA視覺化地呈現資訊,並融入與顧客互動的能力,可以有效增進使用者對網站的瞭解,自然能夠確保潛在或既有客戶不會流失。

減少支援成本:成本是任何一家企業都關心的話題,RIA系統也能夠有效地減少支援的成本。因為網站若能增進使用者對商品或服務的瞭解,顧客就不需要諮詢客服人員,如此便可以減少客服人員的數量。

除此之外,RIA系統非常強調穩定性、可用性與低錯誤率,例如Yankee Candle是一家線上販賣蠟燭商品的公司,自從導入RIA系統之後,顧客可以在網站完成商品訂購,甚至是客製化的商品訂購,不會因為資訊不清楚、功能可用性低或不穩定等因素,必須透過電話與客服人員訂購商品,而降低了70%的客服人力支援。

RIA設計要務,從使用者經驗開始
RIA要成功,前提是透過殫精竭慮的設計,在使用者經驗設計過程中通常有4種角色的參與:使用者經驗指導者、資訊架構師、視覺化設計師與技術設計專家,這4種角色彼此各有不同職掌與分工,分析既有HTML網站、尋找使用者經驗附加價值、融入RIA向量設計與增進視覺化美感等一連串的工作,藉此創造出一個成功的RIA網站。

RIA設計的首要工作,是先從使用者經驗的設計開始,切莫魯莽行事,以為只要找個美工設計人員,急忙弄出一個很炫的向量網站逕自上線,如此只會導致一個失敗的RIA專案。

而RIA失敗所造成的後果,將隨著企業規模愈大則損失愈大,畢竟系統不穩、使用者經驗不良、效益不明確與顧客流失,是一種難以彌補的災難。

《作者簡介》奚江華
聖殿祭司是奚江華在網路上的名字,熱愛微軟 .NET 技術而創建了一個名為「DotNet開發聖殿」的部落格,以發布.NET相關最新資訊為職志,他同時也是.NET書籍作家、微軟專屬講師、微軟MVP。

Kit3D 引擎:Silverlight和JavaScript的結合

Kit3D 引擎:Silverlight和JavaScript的結合
本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw

來源:http://www.markdawson.org/kit3d/
四個範例:
Spinning cubes with solid faces
http://www.markdawson.org/kit3d/demos/cardsandcubes/default.html?solidcubes

Spinning cubes with texture mapped faces

Spinning playing cards with texture mapped faces

3D Picture Grid

官網:http://www.codeplex.com/Kit3D

Silverlight PhotoCarousel (結合flickr)

Silverlight PhotoCarousel (結合flickr)

本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw

Silverlight PhotoCarousel (結合flickr)
http://www.nikhilk.net/Prototypes/PhotoCarousel/
先搜尋,例如搜尋 Taipei
接著就會將結果以 環狀動畫 的方式呈現

Silverlight 1.0 RC SDK

Silverlight 1.0 RC SDK

微軟公司發表了 RC SDK 的一些內容:



新的silverlight.js


一份9頁的文件,說明 Beta 與 RC 版的差異


新的 Silverlight Javascript Application 專案範本。 不過,這一份預覽的 SDK 不包含 RC 版本身,它只是一份先行文件,大家不仿先下載預覽一下


下載:


http://folders.live.com/self.aspx/kocj18oD+kQ/Silverlight/Silverlight%201.0%20SDK%20RC%20Preview.zip

本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw

Silverlight 1.0 RC版

Runtime程式下載網址:

Silverlight 1.0 RC1 / Windows
http://download.microsoft.com/download/7/0/a/70a14f5c-8623-4de8-a08f-6f6e4d74c97c/Silverlight.1.0.RC.exe

Silverlight 1.1 Alpha Refresh / Windows
http://download.microsoft.com/download/1/d/e/1dea63c7-f6d6-4ac9-b1b8-d692e49d939a/Silverlight.1.0.RC.dmg


其他相關工具下載:

Visual Studio 2008 Beta 2
http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx

Visual Studio Extensions for Silverlight
http://go.microsoft.com/fwlink/?LinkID=89149&clcid=0x409

Silverlight 1.0 SDK
http://go.microsoft.com/fwlink/?LinkID=89144&clcid=0x409

Silverlight 1.1 SDK
http://go.microsoft.com/fwlink/?LinkID=89145&clcid=0x409

如何在Silverlight控制項中與Html元素互動(含原始碼下載)

如何在Silverlight控制項中與Html元素互動(含原始碼下載)

Silverlight提供一組對像來描述了Html文檔對像模型,包括HtmlPage, HtmlDocument, HtmlElement, HtmlElementCollection等。
我們可以通過這些對像從Silverlight托管程式碼中存取Html頁面的內容,如取得頁面輸入框的值,導航頁面到新的URL等。
注意:如果需要Silverlight控制項可以存取Html頁面的內容,在建立Silverlight控制項的時候必須將enableHtmlAccess設為True。
下面的範例展示了如何在Silverlight控制項中,將訊息顯示到頁面Div中,以及在Silverlight控制項中導航頁面。

本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw
http://forum.flash2u.com.tw/dispbbs_220_79104_1.html

Silverlight用程式碼動態控制時間軸動畫

http://silverlight.cn/blogs/patrickwj/archive/2007/10/17/safsaf.aspx

目前的Silverlight版本中,如何動態的根據程式碼需要的動畫效果是一個比較常見的問題。

可以使用如下的方法:

在XAML中新建兩個動畫,本例是控制ScaleTransform的X和Y,共兩個動畫:







注意紅色文字是手動加上的,用於找到這兩個關鍵影格,後面程式碼會用到。

相應的CS檔案:

//修改相關參數後播放Storyboard
fadeInBallX.Value = 0.5;
fadeInBallY.Value = 0.5;
onSizeChanged_sb.Begin();

這樣就可以根據程式碼中的值動態的控制動畫效果了,對其它的UIElement.Opacity、SolidColorBrush.Color等屬性的動畫也都適用,非常方便。
本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw

微軟的Silverlight 10個主要特點

一個跨平台跨操作系統的外掛,使Web開發者能夠在瀏覽器中建造豐富的媒體體驗和RIA應用。目前發佈的版本為 RC版,可用於Windows平台上的IE和Firefox瀏覽器,以及Mac OS X平台上的Firefox和Safari瀏覽器。
  在公共發佈版本來臨之際,現在正是瞭解Silverlight的好時候,本文解釋了微軟的Silverlight 10個主要特點,希望能夠輔助你更多瞭解Silverlight的好處和局限性。
  本文作者Shawn Wildermuth是微軟MVP(最有價值專家)(C#),Wildermuth Consulting Services的創始人,已經從事軟體開發超過20年。目前Shawn正在全美做Silverlight的巡迴授課,教人們如何在自己的項目中使用Silverlight。
  1、Silverlight是跨平台/瀏覽器的
  對於大部分開發團隊,建立一個能夠在所有流行的瀏覽器(包括IE、Firefox、Safari、Opera)上完美執行的Web站台是很具挑戰性的事情。這不只是新增程式碼實現的問題,還要進行大量複雜的測試。
  通常面對這個問題的解決方法有兩個:僅支援少數最流行的瀏覽器或者新增質量保證人員的數量。
  而Silverlight允許「一次開發,到處執行」,微軟已經承諾會支援Windows和Mac上的Opera,而Silverlight的Linux版Moonlight也正在開發中。
  2、Silverlight 1.1 才是好戲開場
  對於目前的Silverlight 1.0 RC版,仍有很多組織在考慮是否開始在此平台上進行開發。Silverlight 1.0已經有了許多重要有趣的功能,但還有更多的精彩內容仍需到1.1版才會出現。
  Silverlight 1.1(目前仍處於Alpha預覽)初次開始支援.NET,包括了基本的.NET語言:C#和Visual Basic。而微軟說,Silverlight 1.1將會帶有.NET對動態語言的支援,例如Ruby、Python、動態VB和托管JScript。等到1.1正式發佈,所有.NET語言的支援都會 加入近來,這等於給瀏覽器增加了.NET編譯器。
  3、Silverlight 使用開發者們已經掌握的技術
  Silverlight由微軟現有的一些技術建立而成,如XAML,JavaScript以及.NET技術。如果你已經很熟悉微軟.NET和Web開發技術,這些都可以應用在Silverlight的開發中。
  你選擇開始新項目的Silverlight版本主要基於開發團隊的技術方向。如果你的開發團隊主要做ASP.NET伺服器端開發(主要是C#和 VB.NET),你就需要等待1.1的正式發佈,如果你的團隊專攻像JavaScript這類的客戶端開發,Silverlight就正適合你。
  4、Silverlight的帳號界面使用標記語言——就像HTML
  Silverlight使用XAML來進行帳號界面設計。你可能已經很熟悉另一種標記語言了:HTML。HTML檔案是純文字的,它只需要告訴瀏覽器如何渲染網頁,XAML也是這樣的,只不過,執行文字命令的不再是瀏覽器,而是Silverlight。
  無論開發者在伺服器端用什麼工具進行怎樣的開發,最後你總要建立動態的HTML頁面。XAML是標記語言,因此你可以使用伺服器端技術動態建立XAML,就像你的開發團隊動態建立HTML一樣。標記語言有所不同,但技術並未變化。
  5、Silverlight和AJAX技術互為補充
  網路是不斷進化的。回到1990年代,所有人都告訴開發者應該把盡可能多的執行都放在伺服器端,技術上沒問題,但是這相當影響帳號體驗。現在AJAX已經廣泛流行開來,把程式碼直接放置在瀏覽器中就可以有效改善帳號體驗,這方面最典型的代表就是Google Maps。
  Silverlight也參照了這樣的模型,允許在瀏覽器中創造更加豐富的帳號界面,而採用AJAX和伺服器端交換資料使Silverlight更加強大,結合了Silverlight豐富的帳號界面和AJAX的異步資料傳輸,帳號將得到非常舒適的交互體驗。
  6、Silverlight允許開發者和設計者協同工作
  網路要求開發者們必須越來越多地考慮設計和美觀問題,對帳號的快速響應和直觀的界面已經成為開發標準,這需要在開發中同時加入美術設計和帳號體驗規劃。
  然而,美術師和程式員使用完全不同的資源和工具。通常情況是,美術師把圖片檔案或者HTML框架發給開發者以整合應用程式程式碼,當設計做出更改,整合就沒完沒了地進行。
  Silverlight能提供更好的開發模式。微軟提供給Silverlight工具包是一系列複雜工具的集合,例如Visual Studio,還有連結設計者的工具,成為Expression Studio。
  對於Silverlight,主要的設計工具是Expression Blend,它可以按設計者們所熟知的方式建立XAML內容,使用起來和Adobe Illustrator或者Photoshop差不多。但不同之處在於Blend和開發者使用同樣工具檔案檔案,XAML和JavaScript檔案, 就像在Visual Studio中那樣。當設計完成並修整好,不需要進行中間的整合過程,設計者就可以看到開發人員直接將其作為項目素材加入開發項目。這樣做有助於設計者和 開發人員更加緊密地協同工作。
  7、Silverlight將分包發佈
  Silverlight會分成多個資料包發送給瀏覽器,也就是說程式碼會分成一個或多個包(JavaScript檔案,編譯檔案等等),設計也分成一個或多個包(XAML),以及其他檔案(包括圖片、字體、視訊)。
  剛開始習慣了Flash的單檔案分發模式的開發者會不大理解為什麼這樣做。實際上,這是有好處的。分離的包比現在的Flash完整打包更有助於在服 務器端動態地建立內容,並按照標記語言自由組合。Silverlight也提供功能可以使用zip檔案把所有XAML程式碼使用的內容打包給帳號下載。
  8、Silverlight是嶄新的
  在寫就本文的時候,Silverlight 1.0為RC版,Silverlight 1.1則剛剛發佈Alpha版,這項技術與類似的其他公司同類技術(尤其是Adobe的Flash和Flex)相比還不夠成熟。Flash目前已經到了 9.0,它花了很長時間才達到現在的普及度,但這不是說Silverlight追不上來,微軟在學習他人的經驗和教訓方面很有一手(可以參考一下Java 和.NET),當然這也不是絕對的。
  Silverlight不是Windows Forms、Windows Presentation Foundation(WPF)、Java Applet或者Sharepoint的替代者,簡單的說,如果你需要建立豐富的,優秀的,同時具備跨所有平台和操作系統的應用,那麼 Silverlight正合適。
  9、Silverlight XAML對照WPF XAML
  要把XAML吹捧成為微軟WPF的特長之處並不難,但是它實際上並沒有看起來那麼優秀,這一方面是由於WPF較低的採用率,另一方面就是WPF XAML和Silverlight XAML的區別了。
  首先,WPF的採用率相對於其他客戶端技術而言(例如Visual Basic 6和.NET的Windows Forms)比較低,因此XAML也基本上被荒廢了。
  第二,Silverlight XAML的語法比WPF XAML要簡單一些,當然也會比WPF XAML弱一點,這既是好事也是壞事。Silverlight非常容易上手,但是從WPF轉移而來的開發者可能會覺得有點不夠用。
  按我的感覺,較簡潔的語法對於Silverlight實際上是最合適的,因為執行環境對於帳號而言越精簡越好。Silverlight並不需要把所 有東西都囊括進來,對於一個輕量級客戶端而言沒有這個必要。當然,要能給Silverlight新增更多的功能肯定不錯,但是目前不能僅僅考慮這些,我們 需要謹慎考量加入多少,同時還能保持介面的簡潔和高效。
  10、Silverlight非常適合學習XAML
  就像前一節所說的,Silverlight有著輕量級的XAML語法,這意味著它對於學習XAML的工作方式非常有益,引導那些正在學習XAML的 開發者建立簡明清晰的程式碼,輔助他們快速理解Silverlight的功能特性,當他們開始投向WPF的XAML的時候,就會發現更多的功能和特性已經准 備就緒了。
  相反的,如果開發者從WPF開始應用XAML,隨後換到Silverlight的話就不得不扔掉許多特性。Silverlight的執行時庫目前只有大約4.5MB,.NET 3.0執行時庫(第一個支援WPF的)則接近30MB。
  Silverlight是一個對公司、消費者、帳號都大有裨益的新技術,看了上面這些,現在你可以決定該如何在你的Web戰略中應用Silverlight了。
本文章來自於神魂顛倒論壇 http://forum.flash2u.com.tw

50個以Silverlight技術製作的應用程式【A-Z】

http://odetocode.com/aimages/200705/verlet/default.htm
2D Physics Simulation

http://silverlight.net/samples/1.0/Grand-Piano/default.html
Grand Piano

http://blogs.msdn.com/synergist/pages/silverlight-map.aspx
Silverlight Mind Map

http://www.dolittle.com/Silverlight/3D/TestPage.html
3D Teapot Demo

http://labs.infragistics.com/silverlight/
Infragistics Controls Demo

http://silverlight.net/samples/1.0/Silverlight-Pad/default.html
Silverlight Pad

http://www.junkship.org:8000/silverlightdemo/
Amazon Search Visualization

http://silverlight.net/samples/1.1/chess/run/default.html
JavaScript / .NET Chess

http://www.codeplex.com/silverlight
Silverlight Playground

http://dev.aol.com/mail
AOL Social Mail Gadget

http://sharepoint.microsoft.com/blogs/mikeg/silverlight1/PopflyMashups/bLaugh-o-Sphere.aspx
Laugh-o-Sphere

http://www.junkship.org:8000/silverlightdemo/
Silverlight Rocks

http://explosivedog.com/silverlight/binaryclock/default.html
Binary Clock

http://www.livestation.com/
LiveStation

http://www.wordandspirit.co.uk/SilverNibbles/SilverNibbles.html
SilverNibbles

http://support.newsgator.com/nickh/browserpoker/browserpoker.html
Browser Poker

http://www.cjcraft.com/Blog/2007/05/16/SilverlightLinksTheSilverlightLaunchPadIsReadyForLaunch.aspx
Matrix Digital Rain

http://vistasmalltalk.wordpress.com/2007/06/03/smalltalk-in-silverlight-first-test/
Smalltalk on Silverlight

http://cosmik.members.winisp.net/BubbleFactory/
Bubble Factory

http://blogs.msdn.com/Synergist/pages/journal.aspx
Michael’s Journal

http://silverlight.net/samples/1.0/sprawl/default.html
Sprawl

http://bubblemark.com/
Bubblemark

http://xmldocs.net/
Office Ribbon

http://silverlight.schwarz-interactive.de/ex02/
Surface Prototype

http://mycomix.wintellect.com/Spotlight.aspx?Item=1041
Comic Book Viewer

http://www.photopoints.com/main/Silverlight_Alpha/
Photopoints Gallery

http://intertwingly.net/stories/2007/05/06/?icon=compass
SVG to Silverlight Converter

http://www.andybeaulieu.com/silverlight/DestroyAll/Default.html
Destroy All Invaders

http://www.popfly.com/
Popfly

http://www.telerik.com/demos/aspnet/silverlight/Cube/Examples/RoomDesigner/DefaultCS.aspx
Telerik RadControls 3D Cube

http://www.aisto.com/Roeder/Silverlight/Digger/Default.aspx
Digger

http://silverlight.net/Samples/1.1/DLR-Console/python/index.htm
Python Console

http://odetocode.com/aimages/200705/verlet/default.htm
Verlet Integration Algorithm

http://explosivedog.com/silverlight/discolights/
Disco Dance Floor

http://davidbetz.net/reflectinggraphdemo/
Reflecting Graph

http://www.microsoft.com/downloads/details.aspx?FamilyID=4964cd5f-0dcb-4c22-9378-773100d8e89f&displaylang=en
Windows Journal-to-Silverlight Converter

http://labs.blitzagency.com/?p=50
Dr Greenthumb

http://blogs.msdn.com/ebooth/archive/2007/05/19/view-source-reflector-tool-for-net-silverlight-sites.aspx
Reflector for Silverlight

http://www.windowsvista.si/
Windows Vista Simulator

http://www.bluerosegames.com/brg/drpopper/
Dr Popper

http://blog.roxio.com/labs/2007/05/buzz_with_silverlight_support.html
Roxio Buzz

http://xamlwebpad.peterkellner.net/Default.aspx
XamlWebPad

http://www.wynapse.com/Silverlight/Silverlight_GlyphMap_Utility.aspx
GlyphMap

http://www.cjcraft.com/silverlight/SierpinskiTriangle/Default.html
Sierpinski Triangle

http://delay.members.winisp.net/SimpleSilverlightXpsViewer/
XPS Viewer

http://community.netikatech.com/demos/
GOA WinForms Demo

http://delay.members.winisp.net/SilverlightAirlinesDemo/
Silverlight Airlines Demo

http://www.ltbennett.com/
Zero Gravity

http://www.zillinois.com/blog/2007/05/16/YetAnotherSilverLightXAMLDemo.aspx
Gradient Animations

http://www.vertigo.com/downloads/SilverlightChess/
Silverlight Chess Game Replay

Silverlight 資源連結

Silverlight Core Web Sites 以銀光製作的網站

Microsoft Silverlight Light Up the Web
http://www.microsoft.com/silverlight/

Silverlight
http://silverlight.net/

MSDN Silverlight Dev Center
http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx

Silverlight QuickStarts Silverlight Development Using the .NET Framework
http://www.silverlight.net/quickstarts/managed.aspx

Silverlight Gallery
http://silverlight।net/community/communitygallery.aspx

Silverlight Streaming
http://flash-silverlight.blogspot.com/2007/11/silverlight-streaming.html

Silverlight Forums - Silverlight
http://silverlight.net/forums/

MSDN 討論區: Silverlight General Discussion
http://forums.microsoft.com/MSDN/ShowForum.aspx%3fForumID%3d1182%26SiteID%3d1

MSDN 討論區: Silverlight Designer Issues
http://forums.microsoft.com/MSDN/ShowForum.aspx%3fForumID%3d1183%26SiteID%3d1

MSDN 討論區: Silverlight Developer Issues
http://forums.microsoft.com/MSDN/ShowForum.aspx%3fForumID%3d1184%26SiteID%3d1

Silverlight更多資訊
http://bbs.flash2u.com.tw/FlashTopic76392_214_8_1.htm

Silverlight搶先預覽(1)微軟的RIA技術銀光乍現
http://bbs.flash2u.com.tw/FlashTopic76135_214_8_1.htm

Silverlight搶先預覽(2)Silverlight/RIA不只是炫目的動畫效果
http://bbs।flash2u.com.tw/FlashTopic76136_214_8_1.htm

期待Silverlight 1.1
http://flash-silverlight.blogspot.com/2007/11/silverlight-11.html

Silverlight 完全中文解決方案
http://flash-silverlight.blogspot.com/2007/11/silverlight_08.html

深度體驗SilverLight

Silverlight 快速學習

微軟Silverlight網站
http://www.microsoft.com/silverlight/
http://silverlight.net/

Silverlight 快速學習
http://silverlight.net/quickstarts/blend_quickstart/part1_drawing_painting_and_text.aspx#Create_a_Silverlight_Project_in_Blend

Silverlight 的學習資源
http://www.cjcraft.com/Blog/2007/05/16/SilverlightLinksTheSilverlightLaunchPadIsReadyForLaunch.aspx

Microsoft Expression Blend 中文免費試用版

安裝前若已有安裝英文版本(1.0.1083.0),需先手動移除後重新安裝中文版

Blend中文版下載
http://www.microsoft.com/downloads/info.aspx?na=120&p=&SrcDisplayLang=zh-tw&SrcCategoryId=&SrcFamilyId=de665fe2-7cc4-412a-a5de-bfd737f4aeea&u=details.aspx%3ffamilyid%3dDE665FE2-7CC4-412A-A5DE-BFD737F4AEEA%26displaylang%3dzh-tw%26Hash%3dO79PkeFsY%252b2ZKyYC789NTnV8EaeK6%252bpbT%252bfQszY5856D5ZxKPes7GDJBhvmNzXYGlk5P4mB7KW5eaFSnEe9Q5A%253d%253d

討論群組
http://bbs.flash2u.com.tw/Forum.asp?cat_id=8&forum_id=214
微軟討論區
http://www.microsoft.com/downloads/info.aspx?na=40&p=1&SrcDisplayLang=zh-tw&SrcCategoryId=&SrcFamilyId=de665fe2-7cc4-412a-a5de-bfd737f4aeea&u=http%3a%2f%2fforums.microsoft.com%2fMSDN-CHT%2fdefault.aspx%3fForumGroupID%3d324%26SiteID%3d14

Microsoft Expression 網站
www.microsoft.com%2ftaiwan%2fproducts%2fexpression%2f" target="_blank">http://www.microsoft.com/downloads/info.aspx?na=40&p=2&SrcDisplayLang=zh-tw&SrcCategoryId=&SrcFamilyId=de665fe2-7cc4-412a-a5de-bfd737f4aeea&u=http%3a%2f%2fwww.microsoft.com%2ftaiwan%2fproducts%2fexpression%2f




網路的事情,讓網路解決
[ 逛網路就像是在探險 ]

 神 魂 顛 倒 T W G
http://bbs.flash2u.com.tw
http://www.linkist.com/r/b580fe2eea3f318c
http://tw.myblog.yahoo.com/flash2u-twg
http://flash2u.spaces.msn.com/?_c02_owner=1

WPF簡介

WPF的全稱是Windows Presentation Foundation,是微軟新發佈的Vista操作系統的三大核心開發庫之一,其主要負責的是圖形顯示,所以叫Presentation(呈現)。

作為新的圖形引擎,WPF是基於DirectX的,當然新增了很多新的功能。其2D和3D引擎的強大看看Vista的界面就明白了,再加上其對Aero圖形引擎的支援,更加讓你感到神奇。順便提一下,Aero是專門為3D桌面開發的引擎,可以讓桌面實現神奇的3D翻轉,這絕對是操作系統有史以來的一次神奇嘗試,雖然對硬件設定的要求也是驚人的,此前已有相關報道稱,Vista對顯卡十分挑剔就是出於執行Aero的考慮。

WPF前景分析

WPF其實不僅僅是圖形引擎而已,它將給Windows應用程式的開發帶來一次革命,因為新的架構提供了一種全新的開發模式。當然對於普通使用者而言,最直觀的就是界面越來越漂亮,看起來越來越舒服了;但對於開發人員而言,界面顯示和程式碼將更好的得到分離,這與從前的桌面應用程式開發有很多不同(界面設定和程式碼是融合在一起的),這是比較具有革命性的改變之一。還有就是桌面應用程式和瀏覽器應用程式的融合,根據ms的承諾,正在開發中的WPF/E,即WPF Everywhere版本,將為基於WPF的應用程式提供全面的瀏覽器支援,這意味著未來開發出的應用程式將可以基於瀏覽器在不同的操作系統上執行,當然由於目前還在開發中,我們並不確定會不會有一定的限制,根據WPF/E開發組的定義,WPF/E仍然是WPF的子集,而不是後繼版本。總體而言,WPF的前景應該是一片光明。

目前開發界的對WPF響應程度

目前已有很多人開始考慮或者已經轉向WPF,一場新的學習熱潮已經開始。但根據我最近的學習和瞭解,國內關於WPF的資料很少,除了msdn提供的資料以外,基本都是來自國外的資料,有些則是國外開發人員blog上的資料,當然都是英文的。因此如果現在能夠引進一些WPF的書絕對是很好的時機。而且國外目前的幾本WPF書也是剛剛上市,如果我們可以盡快引進的話,絕對可以輔助國內開發人員在最短時間內趕上國際步伐。

目前微軟針對WPF提供的服務和支援

隨著Vista RTM的發佈,微軟新一輪的技術推廣已經開始。其實在此之前,WPF已經有很大的推廣,因為CTP版本已經發佈了有一段日子了。當然很多開發人員主要以技術研究為主,也有少數公司已經開始從事基於WPF的產品研發工作。

1. 目前WPF的正式版本已經發佈(隨.net framework 3.0正式版發佈),你可以從msdn上免費下載

2. 相應的技術支援已經開始,但目前僅限於大客戶,主要做售前技術支援,對於普通開發人員的技術支援可能要等到明年2月份才會開始(個人知道的情況,請以微軟官方技術支援網站發佈的訊息為準)

3. WPF的VS2005外掛目前還只有社區預覽版(CTP版),也是從msdn上免費下載的,但正式版恐怕還要等一段時間,但使用CTP版本確實已經可以在VS2005中進行所見即所得的WPF開發。

4. WPF/E CTP版本已經發佈,你可以在msdn上免費下載。同時發佈的還有WPF/E Sample Pack for CTP。

Windows Presentation Foundation 完整簡介(中文)

Windows Presentation Foundation 完整簡介(中文)

作者:David Chappell
Chappell & Associates
2006 年 9 月
適用於:
Windows Vista
Windows Presentation Foundation
Microsoft .NET Framework 3.0
原文:http://www.microsoft.com/taiwan/msdn/library/2006/Oct-2006/introducingwpf.htm

摘要:Windows Presentation Foundation (WPF) 的首要目標在於協助開發人員建立吸引人又有效率的使用者介面,本篇文章將介紹 WPF 統一平台何以有助設計人員積極參與使用者介面的建立,並為獨立應用程式及瀏覽器應用程式提供一個共同的程式撰寫模型。(此文章包含連至英文網頁的連結,列印共 34 頁)
目錄
初步介紹 Windows Presentation Foundation
癥結所在
因應之道:Windows Presentation Foundation 之所能
使用 Windows Presentation Foundation
Windows Presentation Foundation 所採用的技術
運用 Windows Presentation Foundation
Windows Presentation Foundation 的工具
開發人員工具:Visual Studio
設計人員工具:Expression Interactive Designer
Windows Presentation Foundation 與其他的 Microsoft 技術
Windows Presentation Foundation 和 Windows Form
Windows Presentation Foundation 和 Win32/MFC
Windows Presentation Foundation 和 Direct3D
Windows Presentation Foundation 和 AJAX/"Atlas"
Windows Presentation Foundation 和 "WPF/E"
結論
作者簡介
初步介紹 Windows Presentation Foundation
一般來說,技術人員關心的多半只是技術。許多軟體專業人士對應用程式的運作方式比對應用程式與使用者的互動方式的興趣還大,可是對於花錢的大爺們來說則不然,使用者還是相當在意使用者介面。應用程式介面是整個軟體使用經驗的主要部分,對使用者來說,其實就等於 應用程式經驗。更好的介面有助於提昇使用經驗,進而促進生產力、有助建立客戶忠誠度,而且能拉動網站或其他等銷售業務。
以往使用者覺得純粹以文字為基礎的介面已經足夠,然而是他們現在已經習慣了圖形介面。隨著使用者介面的需求日益翻新,再加上圖形與媒體的廣泛應用,伴隨著網路的因素,因此大家自然期望與軟體的互動簡單容易。人們花越多時間與應用程式互動,應用程式的介面就越為重要。為了不負這日益顯著的期望,用於建立使用者介面的技術也必須向前邁進。
Windows Presentation Foundation (WPF) 的目標就是為 Windows 提供這些先進的技術。WPF 是 Microsoft .NET Framework 3.0 的一部分,能建置整合了文件、媒體、平面圖形、立體圖形、動畫、網路和其他等特色的介面。它和 .NET Framework 3.0 其他的內容一樣,將可用於 Windows Vista、Windows XP 和 Windows Server 2003,預計與 Windows Vista 同步上市。本篇文章將介紹 WPF,說明它的各種組件。文章主旨是要闡明此技術所能解決的問題,並探討 WPF 提供的解決方案。
癥結所在
假設有一家醫院想建立一個新的應用程式,以供體檢和追蹤病情之用。這個新應用程式的使用者介面的需求如下:
顯示與病人相關的影像與文字。
顯示和更新平面圖形,來顯示病人的生命跡象,例如心跳速度和血壓。
以立體檢視和重疊方式顯示病人資訊。
呈現超音波視訊或其他診斷結果,可能還能讓醫師或護士加上附註。
允許醫療人員讀取文件上有關病人或其狀況的附註,並允許他們在文件中加註。
在作為 Windows 應用程式 (讓醫院全體員工使用) 之際,亦可當成有安全性限制的網路瀏覽器應用程式 (讓遠端醫師透過網際網路進行有限存取)。
上述需求看似難度很高,但其實不是無理的要求。使用者介面要能適時地以合宜的方式呈現正確資訊,才會有高度的商務價值。以這裡所述的醫療情況為例,使用者介面甚至攸關著拯救生命。即便是比較不那麼迫切的情況,例如以線上商務等以消費為主的應用程式,優質的使用經驗依然有助於區別公司產品,使競爭對手相形失色,進而提高銷售量和公司的品牌價值。總而言之,許多的現代化應用程式介面如果能整合圖形、媒體、文件等其他現代化使用經驗的元素,必定獲益非淺。

更多閱讀
http://bbs.flash2u.com.tw/FlashTopic73005_214_8_1.htm

XAML Browser Application 維基百科的說明

XAML Browser Application,是美國微軟公司所提出的新技術,以XAML作為使用者介面(UI)之描述,寄宿(hosted)在瀏覽器(IE web browser sandbox)中執行的程式。XBAP可以取代ActiveX、Java Applet、Flash等功能,有人稱之為下一代的ActiveX(next-generation ActiveX)。XAML Browser Application的副檔名是.xbap。在執行XBAP之前,必須先設定:.NET Framework 3.0 Runtime Windows SDK for .NET Framework 3.0 Visual Studio 2005 extensions for .NET Framework 3.0(November 2006 CTP)
特點XBAPS 更易於與DHTML結合。 XBAPS 一旦使用寬鬆XAML(loose XAML)或使用IFRAME,必執行於安全的沙盒(secure sandbox)。 XBAPS 可以使用WPF(Windows Presentation Foundation)的98.2%的功能。 XBAPS 必須執行於iFrame之下。 XBAPS 必須執行於DocumentObject 應用程式之下,利用querystring 溝通。 XBAPS 目前僅支援IE6或IE7 。
安全性XBAP程式無法使用檔案系統(file system)。 XBAP程式無法呼叫對話視窗(dialog)。 XBAP程式如同DHTML,是網路直接安裝執行,可能遇到安全性問題,所以XBAP程序必須具備內嵌數位簽名。指定簽字用的證書文件名,指定證明文件摘要。
範例將3D動畫置入iframe:
 
將XBAP置入iframe:
原始語法片斷如下
 
差異WinFX Wndows Application和WinFX Web Browser Application有些微的差別,在.xaml檔案中,Browser Application中,預設起始頁的根元素(root element)為Page;Wndows Application中,預設起始頁的根元素為Window。另外,Window class無法在Browser Application中使用,因為IE瀏覽器中的WPF程序是在部分信任的沙箱(sandbox)內執行。

WPF 相關資源

WPF Blogs The WPF BlogWPF Community BlogExpression Team BlogWPF Visual DesignerXAML OnlyKarsten Januszewski
WPF Whitepapers WPF for Windows DevelopersFundamentals, DataGraphics and Media
WPF Videos NY Times Reader demo Karsten Januszewski, a technical evangelist focusing on WPF
Designer DemosDeveloper/Designer Workflow in WPF
WPF Presentations
.NET University Windows Presentation Foundation PPTs
WPF Training
Clinic 5135 AE: Introduction to Developing with Windows Presentation Foundation and Visual Studio 2005Excerpted Invaluable 5 day course from Karsten Januszewski blog post:
1.Watch Developing a WPF Application 2.Michael Wallent's presentation from MIX. 3.Watch A Designer's Overview of WPF 4.Introducing Microsoft Tools for Professional Designers
WPF Sample Applications
Cine.View: A WPF viewing application that exposes the NetFlix catalog and ordering capabilities created by the thirteen23 company. They also have a great viewer for Flickr.
New York Times Reader: A WPF content application that provides a rich browsing and reading experience for the paper's news content online in a Windows application Karen Corby's Woodgrove Finance application: This is a WPF XAML Browser application that provides rich visualization of stock market data in a multi-paned WPF app that runs in the browser. More samples