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事件实现单击时导航到不同的页面。

最终的视图结果同上。