WP7中的菜单栏

一个应用程序的菜单栏的内容是有限的,最多不超过4个,排列顺序是以菜单栏中间为中心,然后从左往右排列。

WP7提供了两种类型的菜单栏,一种是全局的菜单栏,也就是说在所有的页面中都会出现的,而另一种就是局部的菜单栏,就是在某个页面才出现的。全局的菜单栏必须在App.xaml文件中定义,它会以一行简单的XAML代码加到任何一个页面中。对于局部菜单栏的定义,我们有两种方法,第一种是使用XMAL,第二种是直接在代码里面定义。

菜单栏上的icon限制最大为48x48像素,所以我们不能超过这个值,否则会失真,因为它会自动拉申的,WP7已经在系统里提供了挺多的icon了,所以我们最好是使用系统默认的,因为我们使用其他的icon,可能会出现一些不可预料的问题,可能而已,哈哈。先使用xaml来实现。

设置全局菜单栏:

新建一个silverlight项目,然后在项目右边,右键点击项目名选择Add,接着选择New folder,命名为Images,我们要将我们需要显示的icon放入到Images文件夹里面,系统里的icon是放在C:\Program Files \Microsoft SDKs\Windows Phone\v7.1\Icons\dark,你也可以上网自己下载的。

打开App.xaml文件,在里面输入如下代码:

<!--Application Resources-->
<Application.Resources>
<shell:ApplicationBar x:Key="GlobalAppMenuBar" Opacity="1" IsVisible="True"
IsMenuEnabled="True">
<shell:ApplicationBar.Buttons>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png"
Text="add"></shell:ApplicationBarIconButton>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png"
Text="save"></shell:ApplicationBarIconButton>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.delete.rest.png"
Text="delete"></shell:ApplicationBarIconButton>
</shell:ApplicationBar.Buttons>
<shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItem Text="Menu Item1" IsEnabled="True"></shell:ApplicationBarMenuItem>
<shell:ApplicationBarMenuItem Text="Menu Item2" IsEnabled="True"></shell:ApplicationBarMenuItem>
</shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>
</Application.Resources>

打开MainPage.xaml文件,在<phone:PhoneApplicationPage> 输入以下这行代码,

ApplicationBar="{StaticResource GlobalAppMenuBar}" 

此时运行一下项目发现那三个icon都是交叉的那三个图标,这是为什么呢?这是因为visual studio还不是很智能,所以你还要设置一下,鼠标放在 appbar.add.rest.png 上,右击选择properties,在Build Action里选择Content,对另外两个文件也作同样的设置,再次运行,就正常显示出我们想要的效果了。

顺便讲讲Opacity ,这个属性是设置透明度的,它的值是从0到1的,微软建议开发者只使用三个值:0,0.5,1。可以试着使用这三种值看看。

局部菜单栏:

新建一个silverlight项目,然后在项目右边,右键点击项目名选择Add,接着选择New folder,命名为Images,我们要将我们需要显示的icon放入到Images文件夹里面,系统里的icon是放在C:\Program Files \Microsoft SDKs\Windows Phone\v7.1\Icons\dark,你也可以上网自己下载的。

打开MainPage.xaml文件,在<phone:PhoneApplicationPage> </phone:PhoneApplicationPage>之间

输入以下这行代码:

<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBar Opacity="1" IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBar.Buttons>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png" Text="add"></shell:ApplicationBarIconButton>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="save"></shell:ApplicationBarIconButton>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.delete.rest.png" Text="delete"></shell:ApplicationBarIconButton>
</shell:ApplicationBar.Buttons> <shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItem Text="Menu Item1" IsEnabled="True"></shell:ApplicationBarMenuItem>
<shell:ApplicationBarMenuItem Text="Menu Item2" IsEnabled="True"></shell:ApplicationBarMenuItem>
</shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

说明:

phone:PhoneApplicationPage.ApplicationBar 是设置了一个Bar,然后里面再一层层设置Buttons和MenuItem,虽然菜单那里系统只支持我们放四个按钮,但是如果实在要放多个,我们可以使用MenuItem来实现,这也不失为一种好的方法,总而言之,WP7使用的是一种新的设计理念,与Android和ios是不同的,因此有些产品经理想将Android和ios那套设计放到WP7上来,这会让开发和后期维护变得非常痛苦。

以上实现的效果图如下:

使用代码来实现菜单栏

  1. 新建一个项目,命名为ApplicatonBarByCode,新建文件夹Images,并导入相关资源文件,对appbar.add.rest.png 设置其Build Action的值为Content,也可以点F4快捷键的。打开MainPage.xaml.cs文件,首先我们要引入一些shell,所以增加如下代码:
using Microsoft.Phone.Shell;
      
    2.  在构造函数里输入如下代码:
public MainPage()
{
InitializeComponent(); //声明一个菜单栏,并且设置它可见和Menu可以使用
ApplicationBar = new ApplicationBar();
ApplicationBar.IsVisible = true;
ApplicationBar.IsMenuEnabled = true;
}

3.  增加三个菜单按钮和两个MenuItem,如下:

public MainPage()
{
InitializeComponent(); //初始化一个菜单栏,并且设置它可见和Menu可以使用
ApplicationBar = new ApplicationBar();
ApplicationBar.IsVisible = true;
ApplicationBar.IsMenuEnabled = true; //设置三个菜单按钮
ApplicationBarIconButton btnAdd = new ApplicationBarIconButton(new Uri("/Images/appbar.add.rest.png", UriKind.Relative));
btnAdd.Text = "add";
ApplicationBarIconButton btnSave = new ApplicationBarIconButton(new Uri("/Images/appbar.save.rest.png", UriKind.Relative));
btnSave.Text = "save";
ApplicationBarIconButton btnDelete = new ApplicationBarIconButton(new Uri("/Images/appbar.delete.rest.png", UriKind.Relative));
btnDelete.Text = "delete"; //将这三个菜单按钮加入到菜单栏中
ApplicationBar.Buttons.Add(btnAdd);
ApplicationBar.Buttons.Add(btnSave);
ApplicationBar.Buttons.Add(btnDelete); //设置两个MenuItem
ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem("Menu Item1");
ApplicationBarMenuItem menuItem2 = new ApplicationBarMenuItem("Menu Item2"); ApplicationBar.MenuItems.Add(menuItem1);
ApplicationBar.MenuItems.Add(menuItem2);
}

4.   直接点F5运行可以看到效果如下:

5. 接着给菜单按钮加上一些事件响应,先打开MainPage.xaml, 将鼠标移到最左边Toolbox,会列出一系列的控件,拖拉一个TextBox和一个TextBlock进来,并设置TextBox和TextBlock的visibility的属性为Collapsed,TextBox的Text属性为空,TextBlock的Text属性为Please enter your name;

6. 打开MainPage.xaml.cs文件,在构造函数里面输入  

btnAdd.Click += new EventHandler(btnAdd_Click);

  btnSave.Click += new EventHandler(btnSave_Click);

特别要说明一下:当输入“=”的时候,点击Tab键便可自动完成new EventHandler(btnAdd_Click);

  再点击一次Tab键,将生成 

void btnSave_Click(object sender, EventArgs e)

        {

        }

非常智能,非常好用。哈哈。

 7.将完善两个生成的函数:

void btnSave_Click(object sender, EventArgs e)
{
textBlock1.Text = "Thank you," + textBox1.Text;
textBox1.Visibility = Visibility.Collapsed;
} void btnAdd_Click(object sender, EventArgs e)
{
textBox1.Visibility = Visibility.Visible;
textBlock1.Visibility = Visibility.Visible;
}

8.  点击F5运行,我拖拉控件的时候不好,效果不太佳。点击btnAdd,并输入xiaoxing

10. 点击save如下:

wp ApplicationBar的更多相关文章

  1. WP开发笔记——不同Item显示不同ApplicationBar:适用于Pivot与Panorama

    一.在xaml页面定义两个ApplicationBar: <phone:PhoneApplicationPage.Resources> <shell:ApplicationBar I ...

  2. 开发WP版本的大菠萝英雄榜

    前言 想当年Team有无数人在玩大菠萝,我被忽悠进来做肉盾,选了蛮子,从1.0开始,经历了103.105.108.2.0.2.1.这个游戏对我最大的帮助是学习了不同的技术,比如XAML.比如xcode ...

  3. wp仿系统截图

    wp上直接调用CameraCaptureTask,并没有参数设置截图大小,刚好项目需求要截成正方型,于是写了个仿系统截图的demo出来. 截图如下:     需要做的逻辑运算为: 1.初始化照片时:判 ...

  4. <WP8开发学习笔记>ApplicationBar(任务栏)的切换以及“黑条问题”

    ApplicationBar(以下简称AppBar)是WP应用相当常见的控件,也很方便.常见的做法是pivot或者panorama的页面切换的时候,AppBar跟随切换对应的按钮或者不显示按钮,如下图 ...

  5. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  6. wp已死,metro是罪魁祸首!

    1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...

  7. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  8. Android,ios,WP三大手机系统对比

    从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...

  9. 搜狗输入法wp风格皮肤

    换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...

随机推荐

  1. hiho一下 第九十五周 数论四·扩展欧几里德

    题目 : 数论四·扩展欧几里德 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho周末在公园溜达.公园有一堆围成环形的石板,小Hi和小Ho分别站在不同的石板上 ...

  2. table动态添加删除一行和改变标题

    <style type="text/css"> body{ font-size:13px; line-height:25px; } table{ border-top: ...

  3. Django对静态文件的处理——部署阶段

    参考:http://blog.makto.me/post/2012-11-09/static-files-in-django-deployment HTML模板中的用法: {% load static ...

  4. iOS 中不同的modalPresentationStyle对parent view 的影响

    今天写程序时,突然发现当 用 UIModalPresentationPageSheet 弹出一个controller时,parrent view的viewWillDisappear 不会调用.而当用默 ...

  5. Diablo3

    1.装备 主手:元素弓 副手:精细箭袋 头: 胸:燃火外套 手:娜塔亚的手感 护腕:稳击护腕 戒指:罗盘玫瑰+布尔凯索的婚戒 颈部:旅者之誓 腰:科雷姆的强力腰带(速度加25%) 腿:深渊挖掘裤 脚: ...

  6. Java创建Web项目

    首先下载Tomcat服务,用来运行JAVA程序,跟windows中的IIS类似 下载地址:tomcat.apache.org ,最好下载ZIP压缩版的,解压后就可以直接用.如下图: 检查Tomcat是 ...

  7. Redis笔记(二)Redis的部署和启动

    Linux下Redis的部署和启动 下载安装介质 Redis官网地址:http://www.redis.io/目前最新版本是redis-3.0.3. 可以访问 http://download.redi ...

  8. ytu 1304:串的简单处理(水题)

    串的简单处理 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 39  Solved: 11[Submit][Status][Web Board] Desc ...

  9. ytu 1301:Excel地址转换(水题,进制转换)

    Excel地址转换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 41  Solved: 11[Submit][Status][Web Board] D ...

  10. wp8 入门到精通 LINQ to SQL

    http://msdn.microsoft.com/zh-cn/library/bb397924.aspx LINQ 查询操作中的类型关系 (C#) 使用一个人类发明快速检索的方法 // Northw ...