WindowS Phone 7取消了之前的菜单系统,而是通过应用程序栏的形式实现不同程序,功能之间的切换。
每一个应用程序栏最多支持显示4个应用程序(4个图标)。
windows phone 应用程序栏(ApplicationBar)有两种添加方式。一种是通过C#代码添加,还有一种是通过XAML生成应用程序栏。
通过C#代码可以实现应用程序栏的国际化(即实现手机不同语言的切换).而通过XAML生成的应用程序栏是不能实现不同语言的切换功能。这是由于ApplicationBar不是Silverlight的控件,所以ApplicationBar不支持数据绑定。任何数据绑定的目标都必须是自继承自FrameWorkElement这个类。因此无法通过数据绑定来实现国际化和本地化。只能通过c#代码生成ApplicationBar,然后实现国际化和本地化的功能。
具体的方法步骤:
1.通过XAML生成应用程序栏
在xaml页面会自动的生成一下代码,默认情况下的这段代码是被注释掉的。
以上这一段表是声明了一个ApplicationBar,并且添加了两个Button按钮和两个MenuItem.所以如果要增加ApplicationBar,只要把以上代码的注释去掉即可。
说明:ApplicationBarIconButton 表示声明的是一个Button,IconUri表示按钮图标所在的路径,Text表示按钮显示的名称
ApplicationBarMenuItem 表示声明的是一个MenuItem(菜单项),Text表示菜单项的名称。
我们将上面的代码修改如下:
此外还可以通过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事件实现单击时导航到不同的页面。
最终的视图结果同上。 |