Silverlight教程第八部分:使用WPF創建一個Digg桌面應用

 ----------http://blog.joycode.com/scottgu/archive/2008/02/25/114901.aspx

這是8個系列教程的第八部分,這系列示範如何使用Silverlight 2的Beta1版本建造一個簡單的Digg客戶端應用。這些教程旨在按順序閱讀,幫着解釋Silverlight的一些核心編程概念。

使用WPF創建一個Digg桌面應用

這最後一個教程的目的與前面7個有點不同。我們實際上不將在本教程裏在Silverlight中運行代碼,而是將使用WPF和.NET 3.5。我們將拿我們編寫的,在瀏覽器中運行於Silverlight中的現有的Digg應用代碼,重用它來以Windows桌面應用的方式運行。

隨Silverlight發佈的是一套與.NET 框架完整版本相兼容的API子集。這麼做的目的就是允許開發人員學習一個共同的編程模型和工具集,能夠在RIA web應用,豐富的Windows桌面應用和Office解決方案之間重用學到的技能,代碼和內容。

下面是我採取的步驟,來重用我們現有的Digg Silverlight應用代碼(運行於瀏覽器中),來建造一個Windows桌面應用的版本(運行於瀏覽器外)。

第一步:創建一個新的WPF桌面應用

我們先開始使用VS 2008創建一個新的WPF桌面應用。我們將之命名爲“DiggDesktopSample”:

step122.png

這會在VS中創建一個項目,內含2個文件,一個App.xaml,一個 Window.xaml:

step123.png

注意,這個項目的結構與我們在本系列教程的第一篇裏創建的Silverlight應用的結構非常類似(擁有一個App.xaml 文件,一個 Page.xaml 文件)。

第二步:把現有的Digg應用的代碼拷貝進WPF應用中

我們將把現有的DiggApplication Silverlight代碼拷貝/粘貼進我們的新DiggDesktopSample Windows項目中:

step124.png

目前在Beta1版本中,這個拷貝/粘貼是個手工步驟,我們最終將有一個自動化的方式來在不同項目類型間移動代碼。

第三步:修正幾個問題

我需要做2個改動,才能使我們現有的Digg例程代碼被成功編譯:

1) Silverlight Beta1 XAML定義的命名空間 xmlns:URL與完整的WPF桌面版本不同。我需要改動我拷貝進新項目的XAML文件指向完整WPF的定義。這是在發佈前我們還正在研究的東西。

2) 我需要把<&lt;WaterMarkTextBox>控件改成<TextBox>,把 <HyperlinkButton> 控件改成<TextBlock>。這2個控件是Silverlight Beta1 版本中新有的,不存在於完整的WPF版本中(但我們會在將來添加它們)。但我不用改動跟這些控件相關的任何代碼,也不用改動網絡調用,LINQ to XML, 或數據綁定代碼。

做完這些小改動後,項目就可以乾淨地編譯了。

第四步:把Digg應用宿主與桌面窗口中

然後我打開桌面項目中的Windows1.xaml 文件(它是在應用啓動時裝載的默認窗口)。

我把窗體的標題改成“Digg Desktop Version”,擴大了窗口默認的寬度和高度。

然後我把來自前面的Digg Silverlight 項目中的Page.xaml 用戶控件加到窗口中作爲根控件。這在窗口裝載時,會載入該控件並使之可見。我不用改動Page類的代碼,或者對其中的東西改名。因爲是從UserControl繼承而來,它是完全可以宿主於任何WPF窗口或控件中的。

step125.png

我改動的最後一樣東西是因爲Digg REST API 服務器會試着檢測是否是非瀏覽器/服務器在訪問它,有時會在這些情形下給予一個拒絕訪問的回覆(大概是防止自動腳本訪問他們的服務)而導致的一個問題。我通過讓網絡訪問經過一個代理URL解決了這個問題(沒有代碼變動,只是URL改動)。

第五步: 運行應用

然後,我能夠運行我們新的DIgg桌面應用。所有的功能都跟Silverlight的版本一樣工作,應用的行爲也完全一樣:

step126.png

在從列表中選擇一個故事後,細節用戶控件顯示爲:

step127.png

瀏覽器版本和桌面版本間有幾個細微的樣式區別。這主要是因爲WPF在默認情形下繼承了基於當前用戶選擇的操作系統主題的默認樣式(字體,顏色,捲動條等等),而Silverlight 則有一個我們在所有操作系統上都使用的默認主題。如果我們要使得桌面版本和瀏覽器版本絕對一致,我們可以在我們的樣式和控件模板中更明確地指定,否則的話,桌面版本會基於用戶的OS主題做稍微的變動。

結語

我們會在將來推出在Silverlight和WPF項目之間共享代碼的更詳細的注意事項和推薦的最佳實踐指南。我認爲你會發現你在建造Silverlight應用時學到的技能和知識可以很好地轉移到完整的WPF的項目中去。我們也致力於一個非常高的兼容水平,能在解決方案間促進好的代碼重用,促進控件,內容和代碼的輕鬆共享和利用。

希望本文對你有所幫助,

Scott

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章