WindowS Phone 7取消了之前的菜單系統,而是通過應用程式欄的形式實現不同程式,功能之間的切換。
每一個應用程式欄最多支援顯示4個應用程式(4個表徵圖)。
windows phone 應用程式欄(ApplicationBar)有兩種添加方式。一種是通過C#代碼添加,還有一種是通過XAML產生應用程式欄。
通過C#代碼可以實現應用程式欄的國際化(即實現手機不同語言的切換).而通過XAML產生的應用程式欄是不能實現不同語言的切換功能。這是由於ApplicationBar不是Silverlight的控制項,所以ApplicationBar不支援資料繫結。任何資料繫結的目標都必須是自繼承自FrameWorkElement這個類。因此無法通過資料繫結來實現國際化和本地化。只能通過c#代碼產生ApplicationBar,然後實現國際化和本地化的功能。
具體的方法步驟:
1.通過XAML產生應用程式欄
在xaml頁面會自動的產生一下代碼,預設情況下的這段代碼是被注釋掉的。
<!--<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem Text="MenuItem 1"/> <shell:ApplicationBarMenuItem Text="MenuItem 2"/> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>-->
以上這一段表是聲明了一個ApplicationBar,並且添加了兩個Button按鈕和兩個MenuItem.所以如果要增加ApplicationBar,只要把以上代碼的注釋去掉即可。
說明:ApplicationBarIconButton 表示聲明的是一個Button,IconUri表示按鈕表徵圖所在的路徑,Text表示按鈕顯示的名稱
ApplicationBarMenuItem 表示聲明的是一個MenuItem(功能表項目),Text表示功能表項目的名稱。
我們將上面的代碼修改如下:
<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" Opacity="0.5"> <shell:ApplicationBarIconButton x:Name="VideoButton" IconUri="/icons/appbar.feature.video.rest.png" Text="視頻" Click="VideoButton_Click"/> <shell:ApplicationBarIconButton x:Name="WebBrowserButton" IconUri="/icons/appbar.feature.search.rest.png" Text="瀏覽器" Click="WebBrowserButton_Click"/> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem x:Name="EbookButtom" Text="電子書" Click="EbookButtom_Click"/> <shell:ApplicationBarMenuItem x:Name="MusicButton" Text="音樂" Click="MusicButton_Click"/> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>
此外還可以通過Expression Blend來設計Applicationbar。
運行程式點擊(...)會快顯功能表項,如所示。
功能表項目視圖:
為應用程式欄,我們值放入了2個表徵圖。最多可以放4個。
2.通過C#代碼來實現應用程式欄
首先需要添加下面這個命名空間:
using Microsoft.Phone.Shell;
之後在頁面的建構函式中添加如下代碼:
ApplicationBar = new ApplicationBar();//聲明一個ApplicationBar ApplicationBar.IsVisible = true;//設定應用程式欄可見 ApplicationBar.IsMenuEnabled = true;//設定功能表項目可用 ApplicationBarIconButton button1 = new ApplicationBarIconButton(new Uri("/icons/appbar.feature.video.rest.png", UriKind.Relative));//聲明一個Button,並設定其表徵圖路勁。 button1.Text = "Video";//表徵圖顯示的名稱為Video button1.Click += new EventHandler(button1_Click);//註冊Click事件 ApplicationBarIconButton button2 = new ApplicationBarIconButton(new Uri("/icons/appbar.feature.search.rest.png", UriKind.Relative)); button2.Text = "Search"; button2.Click += new EventHandler(button2_Click); ApplicationBar.Buttons.Add(button1);//將Button添加到應用程式欄中,這樣便可以使用該Button了。 ApplicationBar.Buttons.Add(button2);ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem("電子書");//聲明一個MenuItem項,並設定顯示文字為電子書 ApplicationBarMenuItem menuItem2 = new ApplicationBarMenuItem("音樂"); menuItem1.Click += new EventHandler(menuItem1_Click);//註冊MenuItem項的Click事件 menuItem2.Click += new EventHandler(menuItem2_Click); ApplicationBar.MenuItems.Add(menuItem1);//將MenuItem添加到功能表列中,這樣便可以使用該MenuItem了。 ApplicationBar.MenuItems.Add(menuItem2);
以上代碼添加成功後,還需要實現每一個Button和MenuItem項的Click響應函數,在註冊每一個Click事件的時候雙擊TAB鍵會自動的添加Click響應函數,如下所示:
void menuItem2_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("Musics", UriKind.Relative));//這段代碼是自己編寫的,下同。 } void menuItem1_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("Ebook", UriKind.Relative)); } void button2_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("SurferInternet", UriKind.Relative)); } void button1_Click(object sender, EventArgs e) { NavigationService.Navigate(new Uri("Movies", UriKind.Relative)); }
這樣便實現了通過C#代碼的方式自己添加應用程式欄和功能表列,並通過增加Click事件實現單擊時導航到不同的頁面。
最終的視圖結果同上。