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