天天看點

WPF界面設計技巧(11)-認知流文檔 & 小議WPF的野心

流文檔是WPF中的一種獨特的文檔承載格式,它的書寫和呈現方式都很像HTML,它也幾乎具備了HTML的絕大多數優勢,并提供了更強的程式設計支援及對WPF其他元素的相容。

直接來看代碼吧,需要講解的地方比較多,我就直接注釋在代碼裡了,看起來更友善些:

WPF界面設計技巧(11)-認知流文檔 & 小議WPF的野心

Code

<Grid.Resources>部分我定義了文檔的一些通用樣式,這就像内嵌的CSS。Style真是無處不在,嗯,他能比CSS做更多的事,但也更複雜一些。

正文部分,我們看到很多元素都可以找到其在HTML裡的對應,結合我們在HTML中的經驗,這些都可以被輕松了解。

注意标題處引用的靜态資源title是我在别處定義的,在這裡看不到。

背景僅添加以下語句用于處理超連結點選事件,因為獨立應用程式中不會自動處理它們:

WPF界面設計技巧(11)-認知流文檔 & 小議WPF的野心

下面看看顯示效果:

這是呈現出的文檔浏覽界面,流文檔也支援被選取和複制。

我們使用的這種流文檔容器擁有一些實用的内置功能,比如分頁浏覽,下面就是第二頁的樣子:

現在,把視窗拉大,測試一下流文檔的變化:

它像極了HTML,這種自适應性可以讓我們輕松地在多種環境下閱讀。

現在對文檔進行放大,可以看到,文字、圖像都被放大了。這種特性同樣為多環境閱覽提供了有效的幫助,尤其是我們希望通過投影或螢幕展示文檔時。

這是分欄閱讀,可能比較适合有讀書習慣的人使用吧,我是覺得沒什麼意義。

帶滾動條的閱讀方式,比較适合用在網頁和桌面程式界面裡。

文本搜尋功能,和IE裡差不多一樣簡陋~~

可以想象一下,在以後,我們使用一份文檔就可以用于軟體幫助、手冊印刷、投影展示、網頁呈現(支援移動裝置)以及更多應用(如盲人閱讀),而自始至終都不需要做任何修改或轉換。

 嗯,為了實作這一構想,我們從現在做起,把寫死在程式中的流文檔分離出來:

分離出的流文檔檔案:

WPF界面設計技巧(11)-認知流文檔 & 小議WPF的野心

很長啊,主要是因為我把之前那個标題圖形資源“title”給加進來了。

我們在這裡取消了超連結的事件,并且将一些通用的樣式定義也取消了,因為我們要的是一個比較幹淨、純粹的獨立文檔,通用的樣式應該留給使用方去按需求定義。

一個聽起來不錯的消息是:它現在可以直接被IE打開并閱讀了

IE也自動使用我們之前用過的流文檔閱讀器來呈現流文檔。

接下來還要修改一下我們先前的程式,以使之能載入這個文檔。

WPF界面設計技巧(11)-認知流文檔 & 小議WPF的野心

這是修改後的前台代碼。

超連結樣式定義中加入了一個事件設定器,為超連結的點選事件設定為先前的處理程式。

流文檔閱讀器增加一個事件用于在讀取後載入我們分離出去的流文檔。

WPF界面設計技巧(11)-認知流文檔 & 小議WPF的野心

背景就是兩個事件處理,很簡單。

這樣就可以完美還原到我們之前所作的效果了,為了提高感性認識,我把前面的貼圖再弄過來個充數~~

總結一下,流文檔技術現在還不能讓人滿意:應用覆寫面低,就連SilverLight都沒有對其支援;沒有配套編輯軟體,現在手寫代碼是最好的編輯流文檔的途徑,使用RichTextBox隻能進行比較簡單的格式編輯,期待下一版的Office能夠全力支援這一新格式。

這些問題的解決應該都隻是時間問題,流文檔的設計非常簡約、完善,定位十分準确,相信會成為未來網絡文檔的主要載體。

或許有人會問,這麼一個和HTML極度相似的東西有什麼意義?

首先他和HTML定位不一樣,至少是和HTML現在的定位不一樣。我們拿到一個流文檔,很明确的知道它就是一份文檔;但拿到一個HTML,即使它格式再規範,我們也不确定它是什麼東西,它裡面可能摻雜了很多頁頭、頁腳、導航連結、菜單、布局塊、側邊欄、腳本等等,它就是個大雜燴,我們的程式并不喜歡這種不确定的東西。

HTML設計之初也就是用于呈現簡單的文檔,但現在日益膨脹的應用,使得它不得不自己承擔起布局、美化、處理互動等等行為;而我們WPF完全不需顧慮這些,一個簡單到乏味的DockPanel在2分鐘内創造的布局,使用CSS+XHTML可能需要半小時甚至更多的時間才能建立并調試完成,而當我們決定重新調整布局位置時也能同樣輕松的完成,換成CSS就是在經曆噩夢了(是的,它以前就是這麼說表格布局的,事實證明,它們都是噩夢),而Grid更是會讓所有網頁設計師撓牆。

是以你不會看到我去絞盡腦汁地将一個TextBlock定義為一個側邊欄,或是将一個List變為導航菜單,WPF有更精确、更适用的元素用于布局和互動,而HTML不得不靠整容來完成,那些随之産生的無語義的标記就好像墊鼻梁、鹽水袋豐胸一樣讓我覺得惡心。

HTML現在被普遍稱之為網頁,是的,你閉着眼睛也能在網際網路上找到很多HTML“頁”,但你很難見到一份HTML“文檔”。WPF的Page就是頁、Window就是視窗、Document就是文檔,非常清晰明确。

HTML混亂、陳舊的現狀其實就是WPF的巨大機遇,這也應該就是微軟的野心所向,單純以技術能力來講,WPF可以毫不費力的橫掃HTML、Flash、AIR,其所欠缺的,就是我們的推動了。

本來還想寫出流文檔的編輯和輸出呢,一看都2W多字了~~下次再說了~~~

<a href="http://files.cnblogs.com/SkyD/WPFFLOW20080812004536.rar">源檔案</a>

本文轉自斯克迪亞部落格園部落格,原文連結:http://www.cnblogs.com/SkyD/archive/2008/08/12/1265568.html,如需轉載請自行聯系原作者