高立軍
摘 要:Windows 8是微軟公司于2012年推出的繼Windows7之后的新一代電腦操作系統(tǒng),采用與Windows Phone 8相同的NT 內(nèi)核,該操作系統(tǒng)除了具備微軟適用于筆記本電腦和臺(tái)式機(jī)平臺(tái)的傳統(tǒng)窗口系統(tǒng)顯示方式外,還特別強(qiáng)化適用于觸控屏幕的平板電腦設(shè)計(jì),使用了新的接口風(fēng)格Metro,這種應(yīng)用程序和我們傳統(tǒng)看到的Windows應(yīng)用最大的不同就是它是為觸摸屏設(shè)備而設(shè)計(jì)的。
關(guān)鍵詞:Metro 開發(fā)模式 窗口和布局
中圖分類號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2014)06(b)-0039-02
在新的開始菜單里,Win8在支持觸摸屏的同時(shí),定義了一套在Win8上面的手勢(shì)語言。Win8為觸摸設(shè)備提供的觸摸鍵盤,使用體驗(yàn)感覺很好,很靈敏,按下去在屏幕上會(huì)有被按的效果。除此之外,Win8還帶來了以下的幾個(gè)新特性:支持ARM * 2;Win8一個(gè)賬戶可以伴隨著你在不同的設(shè)備上;更加有效的App管理方式;支持多種設(shè)備,多種屏幕尺寸;更加社交化,以及和微博無縫整合。
1 Windows 8 開發(fā)模式
目前Metro app支持三種不同的開發(fā)模式:(1)XAML+C#/VB;(2)XAML/DirectX+C++;(3)HTML5+JS+CSS,組成部分Model、View、ViewModel。View是指UI界面。ViewModel是View的抽象,負(fù)責(zé)View與Model之間信息轉(zhuǎn)換,將View的Command傳送到Model。Model是數(shù)據(jù)訪問層。
2 MVVM(Model-View-ViewModel)
View與ViewModule連接可以通過下面的方式:Binding Data實(shí)現(xiàn)數(shù)據(jù)的傳遞。command實(shí)現(xiàn)操作的調(diào)用,ttachBehavior實(shí)現(xiàn)控件加載過程中的操作。View沒有大量代碼邏輯。結(jié)合WPF、Silverlight綁定機(jī)制,MVP演變出了MVVM,充分利用了WPF、Silverlight的優(yōu)勢(shì),將大量代碼邏輯、狀態(tài)轉(zhuǎn)到 ViewModel,可以說MVVM是專門為WPF、Silverlight打造的。View綁定到ViewModel,然后執(zhí)行一些命令在向它請(qǐng)求一個(gè)動(dòng)作。而反過來,ViewModel跟Model通訊,告訴它更新來響應(yīng)UI。這樣便使得為應(yīng)用構(gòu)建UI非常的容易。往一個(gè)應(yīng)用程序上貼一個(gè)界面越容易,外觀設(shè)計(jì)師就越容易使用Blend來創(chuàng)建一個(gè)漂亮的界面。同時(shí),當(dāng)UI和功能越來越松耦合的時(shí)候,功能的可測(cè)試性就越來越強(qiáng)。Windows 8中可以啟動(dòng)多個(gè)應(yīng)用并在其中切換,我們沒有必要擔(dān)心降低系統(tǒng)速度或消耗電池電量,因?yàn)橄到y(tǒng)會(huì)自動(dòng)掛起(有時(shí)會(huì)終止)在后臺(tái)正在運(yùn)行的應(yīng)用。設(shè)計(jì)良好的應(yīng)用可以由系統(tǒng)掛起、終止以及重新啟動(dòng)來體現(xiàn),并且在這過程中看起來該應(yīng)用一直在運(yùn)行。
3 Metro Application原理
(1)當(dāng)激活了應(yīng)用時(shí),無論任何原因,系統(tǒng)都會(huì)發(fā)送Activated事件;(2)每當(dāng)用戶切換到桌面或其他應(yīng)用時(shí),系統(tǒng)都會(huì)掛起你的應(yīng)用,系統(tǒng)會(huì)發(fā)送Suspending事件;(3)每當(dāng)用戶切回到你的應(yīng)用時(shí),系統(tǒng)就會(huì)恢復(fù)你應(yīng)用,系統(tǒng)會(huì)發(fā)送Resuming事件。
當(dāng)用戶啟動(dòng)應(yīng)用程序,該應(yīng)用在生命周期中可以發(fā)生哪些變化呢?(1)運(yùn)行的應(yīng)用,可以進(jìn)行掛起,變成掛起的應(yīng)用;(2)掛起的應(yīng)用,可以進(jìn)行恢復(fù),變成運(yùn)行的應(yīng)用;(3)掛起的應(yīng)用,如果系統(tǒng)內(nèi)存不足,將直接被干掉。
在任何桌面應(yīng)用程序中,窗口都是基本的組成要素,以至于操作系統(tǒng)都根據(jù)它命名。盡管Metro提供了導(dǎo)航應(yīng)用程序的模型,該模型用于創(chuàng)建能夠?qū)⑷蝿?wù)分割到單獨(dú)頁面中的應(yīng)用程序,但是對(duì)于創(chuàng)建應(yīng)用程序,窗口仍然是這一領(lǐng)域的象征。
4 窗口
Window類繼承自ContentControl類,這意味著它只能包含當(dāng)子元素(通常是一個(gè)布局容器,如Grid控件),并且可以使用由Background屬性設(shè)置的畫刷繪制背景。通常還可以使用BorderBrush和BorderThickness屬性在在窗口周圍添加邊框,但是 該邊框會(huì)被添加到窗口框架之內(nèi)(在客戶去邊緣周圍)。可以通過將WindowStyle屬性設(shè)置為None完全移除窗口框架,從而可以創(chuàng)建一個(gè)完全定制的窗口。此外Window類還添加了不少部分成員,任何一個(gè)Windows編程人員都會(huì)熟悉這些成員。最明顯的是與外觀相關(guān)的屬性,使用這些屬性可以改變窗口客戶區(qū)部分的顯示方式。Application類提供了用于訪問其他窗口的兩個(gè)工具:MainWindow和Windows屬性。如果希望使用更靈活的方式跟蹤窗口,可以在Applocation類中添加靜態(tài)屬性。窗口交互是指獲取其他窗口的引用。作為通信規(guī)則,應(yīng)當(dāng)竟可能的減少窗口之間的交互需要,因?yàn)檫@會(huì)沒有必要的增加代碼的復(fù)雜性,如果確實(shí)需要根據(jù)一個(gè)窗口的動(dòng)作修改另一個(gè)窗口的控件,可以在目標(biāo)窗口中添加一個(gè)方法,從而使窗口的接口變得簡(jiǎn)單易行。對(duì)于時(shí)髦的客戶端應(yīng)用程序,經(jīng)常會(huì)使用形狀不規(guī)則的窗口,且對(duì)于Metro應(yīng)用程序使用不規(guī)則窗口會(huì)更常見。在Metro中創(chuàng)建和使用基本形狀的窗口是非常容易的,然而創(chuàng)建精致的、具有專業(yè)外觀的窗口需要完成更多工作,并且很可能需要由優(yōu)秀的圖形設(shè)計(jì)人員創(chuàng)建輪廓并設(shè)計(jì)背景插圖。
5 布局
Windows 8為開發(fā)人員提供豐富的布局控件,以達(dá)到應(yīng)用布局設(shè)計(jì)需求。其中包括:* Grid、Canvas、StackPanel、WrapGrid、VariableSized WrapGrid、Virtualizing StackPanel以上布局控件皆派生自Panel類,而Panel類可以裝載不同類型的控件作為子控件。Grid是類似于HTML表格的一種布局控件,由于其靈活性高,所以在應(yīng)用設(shè)計(jì)中經(jīng)常被使用到。一個(gè)Grid控件包含一個(gè)Row(行)和Column(列)的集合。開發(fā)人員可以將不同的對(duì)象控件布置在不同的行列中,達(dá)到位置控制的效果。endprint
6 事件與命令
剛開始接觸Metro時(shí),可能會(huì)在自己并不知曉的情況下就用到了路由事件。例如,當(dāng)在Visual Studio設(shè)計(jì)器中向窗口添加一個(gè)按鈕,并將其命名為myButton,然后雙擊該按鈕時(shí),Click事件將掛接在XAML標(biāo)記之內(nèi),它的事件處理程序會(huì)添加到Window類的代碼隱藏中。這種感覺與在 Windows 窗體和ASP.NET中掛接事件并無二樣。實(shí)際上,它比較接近ASP.NET的代碼編寫模型,但更類似Windows窗體的運(yùn)行時(shí)模型。
路由事件概述。
7 路由事件
氣泡事件最為常見,它表示事件從源元素?cái)U(kuò)散(傳播)到可視樹,直到它被處理或到達(dá)根元素。這樣就可以針對(duì)源元素的上方層級(jí)對(duì)象處理事件。例如,可向嵌入的Grid元素附加一個(gè)Button.Click處理程序,而不是直接將其附加到按鈕本身。氣泡事件有指示其操作的名稱(例如,MouseDown)。隧道事件采用另一種方式,從根元素開始,向下遍歷元素樹,直到被處理或到達(dá)事件的源元素。這樣上游元素就可以在事件到達(dá)源元素之前先行截取并進(jìn)行處理。根據(jù)命名慣例,隧道事件帶有前綴Preview(例如PreviewMouseDown)。直接事件類似.NET Framework中的正常事件。該事件唯一可能的處理程序是與其掛接的委托。通常,如果為特殊事件定義了隧道事件,就會(huì)有相應(yīng)的氣泡事件。在這種情況下,隧道事件先觸發(fā),從根元素開始,下行至源元素,查找處理程序。一旦它被處理或到達(dá)源元素,即會(huì)觸發(fā)氣泡事件,從源元素上行,查找處理程序。氣泡或隧道事件不會(huì)僅因調(diào)用事件處理程序而停止路由。如果想中止隧道或氣泡進(jìn)程,可使用傳遞的事件參數(shù)在事件處理程序中將事件標(biāo)記為已處理。一旦的處理程序?qū)⑹录?biāo)記為已處理,該事件便不會(huì)傳給任何其他處理程序。實(shí)際上,事件路由仍在繼續(xù)起作用,可利用UIElement.AddHandler的替換方法在代碼中顯式掛接事件處理程序,該方法有一個(gè)額外的標(biāo)記,可以有效指出“即使事件被標(biāo)記為已處理也可調(diào)用我”。為了讓元素能處理在不同元素中聲明的事件,WPF支持附加事件。附加事件也是路由事件,它支持元素 XAML 形式的掛接,而非聲明事件所用的類型。例如,如果想要Grid偵聽采用氣泡方式通過的Button.Click事件,僅需按如下所示進(jìn)行掛接即可。
8 命令系統(tǒng)的基本元素
命令(Command):實(shí)現(xiàn)了ICommand接口的類,經(jīng)常使用的有RoutedCommand類。命令源:是命令的發(fā)送者,是實(shí)現(xiàn)了ICommandSource接口的類,大部分界面的控件都實(shí)現(xiàn)了這個(gè)接口,Button,MenuItem等等。命令目標(biāo):命令的接收者,命令目標(biāo)是實(shí)現(xiàn)了IInputElement接口的類。命令關(guān)聯(lián):負(fù)責(zé)一些邏輯與命令關(guān)聯(lián)起來,比如判斷命令是否可以執(zhí)行,以及執(zhí)行完畢后做一些處理。四個(gè)命令元素之間的關(guān)系:在Windows Store app開發(fā)中,數(shù)據(jù)綁定非常的重要,它提供了一個(gè)簡(jiǎn)單的方法,使我們的程序可以很方便的顯示數(shù)據(jù)并與數(shù)據(jù)進(jìn)行交互。數(shù)據(jù)綁定:數(shù)據(jù)綁定在UI控件中顯示數(shù)據(jù)是非常重要的一部分內(nèi)容。當(dāng)任意一個(gè)UI控件使用了綁定,那么它將會(huì)顯示出相應(yīng)的數(shù)據(jù)。當(dāng)然,很重要的一個(gè)因素就是當(dāng)綁定的數(shù)據(jù)發(fā)生了改變,此時(shí)UI控件顯示的內(nèi)容就會(huì)自動(dòng)的改變。同樣,當(dāng)用戶在UI控件上做了改變,這些變動(dòng)的數(shù)據(jù)也會(huì)被自動(dòng)保存到數(shù)據(jù)對(duì)象中。
參考文獻(xiàn)
[1] 歐運(yùn)娟.windows系統(tǒng)管理與應(yīng)用[M].北京:人民郵電出版社,2014.
[2] Jeremy Likness.windows8應(yīng)用開發(fā)[M].北京:人民郵電出版社,2014.endprint