|
最近在工作中開始開發(fā)組件,滿足公司的業(yè)務(wù)與技術(shù)需求,同時也在規(guī)劃組件的開發(fā)路線,為公司的下一代產(chǎn)品做好技術(shù)儲備。
元旦假期看了看Windows 8中的組件開發(fā),除了傳統(tǒng)的WPF、Windows Form、Silverlight、ASP.NET組件之外,還新增了一種WinRT組件。
WinRT = Windows Runtime,是Windows 8 新引入的一個新的框架,意在為Windows 平臺上的開發(fā)提供一種語言無關(guān)、高度智能化的平臺。
不是為了取代.NET、Win32等,而是為不同語言編寫的程序提供統(tǒng)一支持,尤其是Metro風(fēng)格程序。
一、準(zhǔn)備工作
安裝Windows 8 Developer Preview、VS 11 Developer Preview等開發(fā)工具。
安裝Win8時注意要用Windows Live ID登錄,若沒有賬戶可以先注冊一個,否則后面會無法運(yùn)行Metro程序。
安裝Win8后注意更新一下顯卡驅(qū)動,AMD官方提供了Windows 8的驅(qū)動,Nvidia使用Win7的驅(qū)動即可,確保分辨率在1024 X 768或更高。
VS 11 建議卸載自帶的Express版本,安裝全功能的Developer Preview版本。
此外,SQL Server 2012 RC0也已經(jīng)發(fā)布,建議安裝。
二、開始開發(fā)
2.1、創(chuàng)建一個Windows Metro Style的Class Library項(xiàng)目:
2.2、添加一個類:
2.3、寫一個ButtonX,繼承自Button:
WinRT的組件大部分位于Windows.UI.Xaml.Controls命名空間:
2.4、WinRT與WPF、Silverlight組件類似,我就照著葫蘆畫飄,在ButtonX中添加如下代碼:
2.5、新建一個Themes文件夾,在其中添加Generic.xaml文件,因?yàn)闆]有資源字典這種項(xiàng)類型,故需要添加一個Page,然后把后臺代碼刪除:
使用ResourceDictionary來分別加載多個組件。
2.6、同樣添加一個ButtonX.xaml,在其中寫入如下代碼:
xmlns:winrt="clr-namespace:Brooks.CustomerControl.WinRT" 為添加的前綴引用。
2.7、此時如果直接編譯,會提示錯誤:
Google了半天,沒找到解決方案,干脆把缺失的文件復(fù)制到相應(yīng)位置,沒想到就好了。
這樣,最簡單的一個ButtonX組件就完成了,下面新建一個項(xiàng)目來測試一下。
2.8、創(chuàng)建一個Windows Metro Style的Application項(xiàng)目:
添加項(xiàng)目引用:
2.9、添加一個Test.xaml空白Page,一開始我這樣引用組件:
xmlns:winrt="Brooks.CustomerControl.WinRT;assembly=Brooks.CustomerControl.WinRT"
運(yùn)行時總是出錯,ButtonX是未知類型。
后來我使用IDE來自動添加引用,原來是使用using,且不需要添加assembly了。
xmlns:winrt="using:Brooks.CustomerControl.WinRT"
這樣就可以了:
2.10、在其單擊事件中寫入如下代碼,單擊一次ButtonX就把按鈕寬度增加5:
2.11、運(yùn)行后就可以看到效果了:
此時如果使用本地賬戶登錄的Windows 8或者顯示分辨率低于1024 X 768,就很可能出現(xiàn)類似這個錯誤:
看上去是權(quán)限問題,這個網(wǎng)上很多人都遇到了。
成功運(yùn)行后效果如下:
在Metro的導(dǎo)航中也可以看到這個程序:
2.12、關(guān)于.winmd
Windows 8種針對WinRT應(yīng)用引入了一種新的組件winmd,文件擴(kuò)展名為.winmd。本質(zhì)上就是一個dll,即PE格式。
Windows 8的winmd組件默認(rèn)位于:C:/Program Files (x86)/Windows Kits/8.0/Windows Metadata
用16進(jìn)制編輯器可以打開查看:
也可以直接反編譯:
我的自定義組件的項(xiàng)目類型依然是Class Library,若改成WinMD會遇到錯誤:
若有朋友解決了這個問題,請告知。
小結(jié):
Windows 8的發(fā)布將會將觸角拓展到平板、手持設(shè)備的領(lǐng)域,WinRT作為一種基礎(chǔ)的解決方案,值得關(guān)注。
由于目前Windows 8還處于非常早期的階段,所以開發(fā)環(huán)境等還不是很完善,相信隨著正式版的臨近,上面那些問題也會一一解決。
再談WinRT自定義組件的開發(fā)
Windows 8 消費(fèi)者預(yù)覽版終于發(fā)布了,我也于第一時間下載并進(jìn)行了安裝,看了看WinRT組件開發(fā)的部分,事情變得明朗起來。
New Item的模板多了很多:
開發(fā)自定義組件必須的項(xiàng)目類型終于被添加進(jìn)來,現(xiàn)在開發(fā)一個自定義組件就容易多了。
這次依舊來開發(fā)上次一樣的ButtonX,重寫的方法與以前WPF、Silverlight一樣了:
開發(fā)預(yù)覽版中的OnApplyTemplateCore方法被廢除了。
現(xiàn)在自定義組件的模板要被迫寫在Generic.xaml一個文件里了,無法拆分為多個xaml,不知道為何。
成功運(yùn)行后自定義模板生效了:
NET技術(shù):開發(fā)WinRT自定義組件,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。