WP8.1学习系列(第一章)——添加应用栏
做过android开发的同学们应该都知道有个ActionBar的头部操作栏,而wp也有类似的一个固定在app页面里通常拥有的内部属性,就是应用栏。以前叫做ApplicationBar,现在wp和win统一称AppBar,以后Win10一统手机和桌面相信Api将会高度统一。
废话不多说了,从wp8.1开始,系统提供了AppBar和CommandBar两种控件,CommandBar集成了很多功能,但是是系统指定的模板,如果要高度自定义(如显示进度条,搜索框等等)应用栏就需要使用AppBar了。其中AppBar有两种,一种是TopAppBar,一种是BottomAppBar,一个在顶部一个在底部。只有windows才支持TopAppBar,wp只支持BottomAppBar。而CommandBar也分两种,一种是PrimaryCommands,另一种是SecondaryCommands,在windows上的区别是PrimaryCommands靠右边,SecondaryCommands靠左边;而在wp上的区别是PrimaryCommands是底部可见区域,SecondaryCommands是默认隐藏的。CommandBar还有个ClosedDisplayMode该属性有两个状态可供选择,Minimal是迷你模式仅显示右边三个点,并且AppBar的高度也缩减到仅包括三个点的高度,Compact就是默认模式。
应用栏主要包含两种元素,一种是按钮一种是分割线。所以系统为我们提供了AppBarButton、AppBarToogleButton和AppBarSeperator三个控件,而普通AppBarButton主要是三个属性需要我们更改,一个是Lable文本,一个是Icon,还有Click点击事件也比较常用,还有一个是IsCompact是否收起,如果为True就会隐藏文本仅显示图标,反之两者都会显示,但是在wp上这个属性貌似不会起作用。
其中Icon 属性设置为从 IconElement 类派生而来的元素。共提供了 4 种图标元素:
- FontIcon - 此类图标基于指定字体系列的字形。
- BitmapIcon - 此类图标基于指定了 Uri 的位图图像文件。
- PathIcon - 此类图标基于 Path 数据。
- SymbolIcon - 此类图标基于 Segoe UI Symbol 字体中的预定义字形列表。
一、静态示例
xaml示例:
<Page.BottomAppBar>
<CommandBar x:Name="cm" ClosedDisplayMode="Minimal">
<CommandBar.PrimaryCommands >
<AppBarButton Label="确定" Click="AppBarButton_Click" IsCompact="False" Icon="Accept"/>
<AppBarButton x:Name="abb" Label="搜索" Icon="Find"/>
<AppBarButton Label="收藏" Icon="Favorite"/>
<AppBarButton Label="附件" Icon="Attach"/>
</CommandBar.PrimaryCommands>
<CommandBar.SecondaryCommands>
<AppBarButton Label="关于"/>
<AppBarButton Label="使用帮助"/>
<AppBarButton Label="反馈"/>
</CommandBar.SecondaryCommands>
</CommandBar>
</Page.BottomAppBar>
如下图,上面一排就是PrimaryCommands,下面一列就是SecondaryCommands

静态的AppBar应该都没什么好说的,选择Icon资源时我们可以利用系统提供的很多规范的图标,按下图即可找到系统资源。

二、动态控制
市场上众多的教程书上只会叫你做静态的AppBar,但现实中可能需要对AppBar的动态控制,接下来将会讲解怎么对AppBar动态控制。这个示例的流程是:打开程序将会有一个WebView来加载网页,一开始AppBar是迷你状态的,当网页加载完后将会把AppBar恢复到标准状态,底部四个按钮可见。并且当网页加载完,AppBar的背景色将设置为系统的背景色。然后点击第一个按钮的时候将隐藏掉第二个按钮,再次点击第一个按钮将会把第二个按钮恢复为可见。
/// <summary>
/// 当网页加载完毕后触发
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
private void WebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
if (cm.ClosedDisplayMode == AppBarClosedDisplayMode.Minimal)
{
//如果是迷你模式将切换至标准模式
cm.ClosedDisplayMode = AppBarClosedDisplayMode.Compact;
//尝试把四个按钮的文字显示出来,但是没有任何效果
for (int i = ; i < cm.PrimaryCommands.Count; i++)
{
((AppBarButton)cm.PrimaryCommands.ElementAt(i)).IsCompact = false;
}
//设置为系统主题
this.BottomAppBar.Background = (Brush)Application.Current.Resources["PhoneAccentBrush"];
} } /// <summary>
/// 按下第一个按钮,动态控制第二个按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AppBarButton_Click(object sender, RoutedEventArgs e)
{ if (this.cm.PrimaryCommands.Contains(abb))
{
this.cm.PrimaryCommands.Remove(abb);
}
else
{
this.cm.PrimaryCommands.Insert(, abb);
} }
上图



加载中,AppBar是迷你模式,并且背景色也是黑色。加载完之后背景色就变成系统颜色了。


点击第一个勾,第二个搜索按钮就隐藏了,再次点击又变回来了,而且还是在第二个位置。
WP8.1学习系列(第一章)——添加应用栏的更多相关文章
- WP8.1学习系列(第二十章)——添加控件和处理事件
先决条件 添加控件 设置控件的名称 设置控件属性 创建事件处理程序 新控件 总结 相关主题 通过使用如按钮.文本框和组合框等控件,你可以创建应用的 UI. 下面将显示如何将控件添加到应用.处理控件时, ...
- WP8.1学习系列(第二章)——Toast通知
Toast 通知概述(Windows 运行时应用) 你的应用要想通过 Toast 通知通信,必须在应用的清单文件中声明它支持 Toast.Toast 通知可包含文本,并且 Windows 上的 Toa ...
- Python 学习系列----第一章:基础知识
1.1 常量-----不能改变它的值 1.2 数 在Python 中数可以分为整数.浮点数和复数. PS:在Python中不用区分'long int'类型.默认的整数类型可以任意长.(译者注:长度应该 ...
- WP8.1学习系列(第九章)——透视Pivot开发指南
Windows Phone 8 的 Pivot 控件 2014/6/18 适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows P ...
- WEBGL 2D游戏引擎研发系列 第一章 <新的开始>
WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...
- Java学习记录第一章
学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...
- 创芯Xilinx Microblaze 学习系列第一集
创芯Xilinx Microblaze 学习系列第一集 Xilinx ISE Design Suite 13.2 The MicroBlaze™ embedded processor soft cor ...
- WP8.1学习系列(第二十六章)——控件模板
在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...
- JavaScript高级程序设计学习笔记第一章
作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...
随机推荐
- SpringMVC系列(二): SpringMVC各个注解的使用
1.@RequestMapping 1.@RequestMapping除了能修饰方法,还能修饰类(1)修饰类:提供初步的请求映射信息,相对于web请求的根目录(2)修饰方法:提供进一步的细分映射信息相 ...
- mysql replace into用法详细说明
From: http://www.cnblogs.com/martin1009/archive/2012/10/08/2714858.html REPLACE的运行与INSERT很相似.只有一点例外, ...
- Windows 2008禁止IE增强安全配置修改安全设置方法
windows 2008更改IE安全设置 在默认状态下,使用Windows Server 2008系统自带的IE浏览器访问网页内容时,我们时常发现页面内容显示不全.后来,我们进入IE浏览器的Inter ...
- asp.net导出excel 问题及服务器的部署dcom组件配置
一.服务器上没有装office 如果要用MS的,这个问题基本不用考虑,只有安装才能解决,没有其它办法! (即使有牛人弄出来 了,估计也是给自己找麻烦) 不过,我只在服务器上装了一个2003精简版, 我 ...
- 183使用 MediaPlayer Framework 框架播放视频
效果如下: ViewController.h #import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> @inte ...
- vue-router 2 跳转失败原因
axios.post('/internal/user/login_from_mobile ',{ mobile: this.logPrefix+this.formInline1.mobile, pas ...
- libaio.so.1: undefined reference to `__stack_chk_fail@GLIBC_2.4'
没有别的原因: 找正确的 libaio.so.1 包就成. 我这儿有,需要的可以下载奥!
- Thinkphp 模板中使用自定义函数的方法
1.number_format {$number|number_format=2} 千分位,保留两位小数 2.round {$number|round=2} 四舍五入保留两位小数
- javascript生成m位随机数
根据时间生成m位随机数,最大13位随机数,并且不能保证首位不为0 function ran(m) { m = m > 13 ? 13 : m; var num = new Date().getT ...
- Linq To EF (添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)
1:添加记录后,如何获取新添加的ID的值 比如,一个实体 TestEntity 对应一个表TestEntity(ID主键自增,Name,age),使用linq to ef 添加一条记录后,如何 ...