相信不少開發Windows 8程序的朋友都是從傳統.NET開發或Windows Phone開發遷移的,對於很多內容新上手確實不太容易掌握,我最近也准備開一個Windows 8的項目,這幾天初步看了一下SDK中的內容,寫兩個小Tip,高手請繞行,希望對新手有幫助。
1. 對話框 - MessageBox
MessageBox是最基礎的傳統.NET類庫中的一員,不管是Windows Form,Windows Phone,WPF,Silverlight我相信大家第一次接觸這些客戶端編程的時候都會用MessageBox.Show()去顯示一下我們想看到的信息,但是在Windows 8 RT中,MessageBox消失了,取而代之的是一個叫MessageDialog的新對話框:
首先給大家看一個最傳統的用法:
md.ShowAsync();
乍看上去這個用法沒問題,而且顯示的效果在Hello World這樣的程序里也不會有異樣,但是仔細看一下,Show后面多了一個Async的字樣,看到這里就要告訴大家,這個用法是一個病態方式來顯示對話款。
解釋一下原因,首先Windows 8 RT的程序和傳統應用程序有一定差別,很重要的一點就是動態磁貼,既然是叫動態,那么我們希望它始終是動態顯示的,不受其他操作的阻礙,如果按照剛才代碼來實現對話框的話,主線程的內容將停止一切動態動作,這樣就給使用者非常不好的用戶體驗,Windows 8 RT的API中早已預料到這一點,所以Async就派上了用場,接着先看一下正確的代碼:
MessageDialog md = new MessageDialog( " This is a MessageDialog ", " Title ");
await md.ShowAsync();
}
上面的代碼有亮點需要注意,首先是按鈕點擊事件中多了一個async關鍵詞,這個是C# 5.0的新特性,大家可以先理解為一個簡單的異步,具體的大家可以搜一下,相信資料很多,另外就是對話框的show方法前面有一個await的關鍵字,這樣既可實現主線程不阻塞的對話框,這里注意,async和await需要配合使用。
簡單的使用如上述內容,但是有的時候我們還需要給對話框的操作結果作判斷,然后執行不同的后續操作,這里MessageDialog也給出的方法,代碼如下:
MessageDialog md = new MessageDialog( " This is a MessageDialog ", " Title ");
bool? result = null;
md.Commands.Add(
new UICommand( " OK ", new UICommandInvokedHandler((cmd) => result = true)));
md.Commands.Add(
new UICommand( " Cancel ", new UICommandInvokedHandler((cmd) => result = false)));
await md.ShowAsync();
if (result == true) {
// do something
}
Button1.Content = result.ToString();
}
大家可以根據這個方法自定義Dialog的顯示,雖然感覺比以前復雜了,但是比以前的可擴展性增強了不少。
以上就是對話框的內容,希望新手朋友們有用。
2. 程序任務欄 - ApplicationBar
說到任務欄,其實起源於Windows Phone,做過Windows Phone開發的朋友應該很清楚任務欄的功能,因為默認項目摸板中就帶有任務欄的代碼,而且修改起來也非常方便,但在Windows 8 RT中對任務欄的實現方式做了不小的變化,首先是任務欄不會被作為一個頁面框架中的一部分,而是變為了頁面布局中的一個成員,大家可以根據自己的需求完全定制任務欄的樣式,大小等等內容,看一個簡單的代碼:
< Grid.RowDefinitions >
< RowDefinition />
< RowDefinition Height ="100" />
</ Grid.RowDefinitions >
< Button Content ="Button" HorizontalAlignment ="Left" Margin ="472,233,0,0" VerticalAlignment ="Top" Click ="Button_Click_1" />
< AppBar Grid.Row ="2" >
< StackPanel >
< Button Content ="text" ></ Button >
</ StackPanel >
</ AppBar >
</ Grid >
更標准的用法如下:
< AppBar >
< StackPanel >
< Button Content ="text" ></ Button >
</ StackPanel >
</ AppBar >
</ Page.TopAppBar >
< Page.BottomAppBar >
< AppBar >
< StackPanel >
< Button Content ="text" ></ Button >
</ StackPanel >
</ AppBar >
</ Page.BottomAppBar >
這就是最簡單的代碼,大家只要把這段代碼替換掉Windows 8 Application里的空白頁面中的Grid即可。
這段代碼實現的效果如下:
會在程序最下方建立一個100像素的任務欄,當鼠標右擊時出現。
當然,這個100像素是可以調整的,其中的StackPanel也是一個傳統容器,可以加很多內容進去,但是盡量遵循Metro設計准則。
以上就是我要分享內容,最近開了一個Windows Phone開發社區,也歡迎大家前往發帖,提問: