当前位置: 首页 > news >正文

WP7 开发(十四) ApplicationBar

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如下:

转载于:https://www.cnblogs.com/xingfuzzhd/archive/2011/11/22/2259130.html

相关文章:

  • Linux下搭建svn服务器
  • nodejs的一些局限
  • 操作无法完成。键入的打印机名不正确,或者指定的打印机没有连接到服务器上...
  • 红黑树源码及错误解析
  • 修复垂直滑动RecyclerView嵌套水平滑动RecyclerView水平滑动不灵敏问题
  • 无线网络覆盖 郑州大学第三届acm比赛试题 n 199
  • 回数
  • 生成备案号例如80-027-1-001 规则为:企业编号-所在区号-产品类别-序号
  • 颠覆你的认知,带你领略史上最为齐全的微软黑科技之旅
  • 时代杂志评年度十大科技产品 iPad 2居首
  • 成功恢复FAT32误格式化后所有碎片文件(已覆盖的除外)
  • maya羽毛制作插件
  • 如何使用sendEmail发送邮件
  • TightVNC 企业内部部署
  • 请读者帮忙投个票喔
  • Date型的使用
  • hadoop集群管理系统搭建规划说明
  • leetcode46 Permutation 排列组合
  • Netty源码解析1-Buffer
  • WinRAR存在严重的安全漏洞影响5亿用户
  • XML已死 ?
  • 阿里云Kubernetes容器服务上体验Knative
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 使用 QuickBI 搭建酷炫可视化分析
  • 事件委托的小应用
  • 为什么要用IPython/Jupyter?
  • 小试R空间处理新库sf
  • 新版博客前端前瞻
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​香农与信息论三大定律
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #HarmonyOS:基础语法
  • #NOIP 2014# day.2 T2 寻找道路
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(一种朴素的计算器实现方法)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (1)虚拟机的安装与使用,linux系统安装
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (function(){})()的分步解析
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)Linux网络编程入门
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 使用反射注册事件
  • .Net8 Blazor 尝鲜
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net连接MySQL的方法
  • .NET序列化 serializable,反序列化
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?