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事件实现单击时导航到不同的页面。
最终的视图结果同上。