第三步:修正幾個(gè)問(wèn)題
我需要做2個(gè)改動(dòng),才能使我們現(xiàn)有的Digg例程代碼被成功編譯:
- Silverlight Beta1 XAML定義的命名空間 xmlns:URL與完整的WPF桌面版本不同。我需要改動(dòng)我拷貝進(jìn)新項(xiàng)目的XAML文件指向完整WPF的定義。這是在發(fā)布前我們還正在研究的東西。
- 我需要把<<WaterMarkTextBox>控件改成<TextBox>,把 <HyperlinkButton> 控件改成<TextBlock>。這2個(gè)控件是Silverlight Beta1 版本中新有的,不存在于完整的WPF版本中(但我們會(huì)在將來(lái)添加它們)。但我不用改動(dòng)跟這些控件相關(guān)的任何代碼,也不用改動(dòng)網(wǎng)絡(luò)調(diào)用,LINQ to XML, 或數(shù)據(jù)綁定代碼。
做完這些小改動(dòng)后,項(xiàng)目就可以干凈地編譯了。
第四步:把Digg應(yīng)用宿主與桌面窗口中
然后我打開(kāi)桌面項(xiàng)目中的Windows1.xaml 文件(它是在應(yīng)用啟動(dòng)時(shí)裝載的默認(rèn)窗口)。
我把窗體的標(biāo)題改成“Digg Desktop Version”,擴(kuò)大了窗口默認(rèn)的寬度和高度。
然后我把來(lái)自前面的Digg Silverlight 項(xiàng)目中的Page.xaml 用戶(hù)控件加到窗口中作為根控件。這在窗口裝載時(shí),會(huì)載入該控件并使之可見(jiàn)。我不用改動(dòng)Page類(lèi)的代碼,或者對(duì)其中的東西改名。因?yàn)槭菑腢serControl繼承而來(lái),它是完全可以宿主于任何WPF窗口或控件中的。
我改動(dòng)的最后一樣?xùn)|西是因?yàn)镈igg REST API 服務(wù)器會(huì)試著檢測(cè)是否是非瀏覽器/服務(wù)器在訪問(wèn)它,有時(shí)會(huì)在這些情形下給予一個(gè)拒絕訪問(wèn)的回復(fù)(大概是防止自動(dòng)腳本訪問(wèn)他們的服務(wù))而導(dǎo)致的一個(gè)問(wèn)題。我通過(guò)讓網(wǎng)絡(luò)訪問(wèn)經(jīng)過(guò)一個(gè)代理URL解決了這個(gè)問(wèn)題(沒(méi)有代碼變動(dòng),只是URL改動(dòng))。
第五步: 運(yùn)行應(yīng)用
然后,我能夠運(yùn)行我們新的DIgg桌面應(yīng)用。所有的功能都跟Silverlight的版本一樣工作,應(yīng)用的行為也完全一樣:
在從列表中選擇一個(gè)故事后,細(xì)節(jié)用戶(hù)控件顯示為:
瀏覽器版本和桌面版本間有幾個(gè)細(xì)微的樣式區(qū)別。這主要是因?yàn)閃PF在默認(rèn)情形下繼承了基于當(dāng)前用戶(hù)選擇的操作系統(tǒng)主題的默認(rèn)樣式(字體,顏色,卷動(dòng)條等等),而Silverlight 則有一個(gè)我們?cè)谒胁僮飨到y(tǒng)上都使用的默認(rèn)主題。如果我們要使得桌面版本和瀏覽器版本絕對(duì)一致,我們可以在我們的樣式和控件模板中更明確地指定,否則的話(huà),桌面版本會(huì)基于用戶(hù)的OS主題做稍微的變動(dòng)。
結(jié)語(yǔ)
我們會(huì)在將來(lái)推出在Silverlight和WPF項(xiàng)目之間共享代碼的更詳細(xì)的注意事項(xiàng)和推薦的最佳實(shí)踐指南。我認(rèn)為你會(huì)發(fā)現(xiàn)你在建造Silverlight應(yīng)用時(shí)學(xué)到的技能和知識(shí)可以很好地轉(zhuǎn)移到完整的WPF的項(xiàng)目中去。我們也致力于一個(gè)非常高的兼容水平,能在解決方案間促進(jìn)好的代碼重用,促進(jìn)控件,內(nèi)容和代碼的輕松共享和利用。
希望本文對(duì)你有所幫助,
Scott
本文鏈接:http://m.95time.cn/tech/multimedia/2008/5393.asp
出處:Scott Guthrie 博客中文版
責(zé)任編輯:bluehearts
上一頁(yè) 使用WPF創(chuàng)建一個(gè)Digg桌面應(yīng)用 [1] 下一頁(yè)
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|