做过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学习系列(第一章)——添加应用栏的更多相关文章

  1. WP8.1学习系列(第二十章)——添加控件和处理事件

    先决条件 添加控件 设置控件的名称 设置控件属性 创建事件处理程序 新控件 总结 相关主题 通过使用如按钮.文本框和组合框等控件,你可以创建应用的 UI. 下面将显示如何将控件添加到应用.处理控件时, ...

  2. WP8.1学习系列(第二章)——Toast通知

    Toast 通知概述(Windows 运行时应用) 你的应用要想通过 Toast 通知通信,必须在应用的清单文件中声明它支持 Toast.Toast 通知可包含文本,并且 Windows 上的 Toa ...

  3. Python 学习系列----第一章:基础知识

    1.1 常量-----不能改变它的值 1.2 数 在Python 中数可以分为整数.浮点数和复数. PS:在Python中不用区分'long int'类型.默认的整数类型可以任意长.(译者注:长度应该 ...

  4. WP8.1学习系列(第九章)——透视Pivot开发指南

    Windows Phone 8 的 Pivot 控件 2014/6/18 适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows P ...

  5. WEBGL 2D游戏引擎研发系列 第一章 <新的开始>

    WEBGL 2D游戏引擎研发系列 第一章 <新的开始> ~\(≥▽≤)/~HTML5游戏开发者社区(群号:326492427) 转载请注明出处:http://html5gamedev.or ...

  6. Java学习记录第一章

    学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...

  7. 创芯Xilinx Microblaze 学习系列第一集

    创芯Xilinx Microblaze 学习系列第一集 Xilinx ISE Design Suite 13.2 The MicroBlaze™ embedded processor soft cor ...

  8. WP8.1学习系列(第二十六章)——控件模板

    在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...

  9. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

随机推荐

  1. 使用Maven运行单元测试

    要通过Maven运行单元测试,发出此命令: mvn test 这会在你的项目中运行整个单元测试. 案例学习 创建两个单元测试,并通过 Maven 的运行它.参见一个简单的 Java 测试类: pack ...

  2. CI框架 -- 核心文件 之 Output.php(输出类文件)

    CI输出类Output.php的功能是将最终web页面发送给浏览器,这里面的东西可能是你用的最少的.你使用装载器加载了一个视图文件, 这个视图文件的内容会自动传递给输出类对象, 然后呢,在方法执行完毕 ...

  3. ajax 把返回结果作为参数传递

    这个涉及到js的异步执行了,程序本身是同步执行的,到了getJSON这里的时候,这个函数是异步的,而 load_val这个函数是同步的,你需要这样来异步返回这个值 function load_val( ...

  4. A:LinkedList实现了List接口; B: AbstractSet实现了Set接口; C: HashSet继承自AbstractSet基类; D: WeakMap继承自 AbstractMap

    List,Set,Map在java.util包下都是接口 List有两个实现类:ArrayList和LinkedListSet有两个实现类:HashSet和LinkedHashSetAbstractS ...

  5. Linux服务器 java生成的图片验证码乱码问题

    问题:如图所示项目中生成的图形验证码不能正常显示出需要的字体 原因:  linux下没有对应的字体 查找项目中使用到系统字体的地方,如下: 解决: 1. 在本地 路径 C:\Windows\Fonts ...

  6. Link1123:转换到COFF期间失败:文件无效或损坏

        当在编译VS项目时,出现如下错误:         这个错误,表明在连接阶段出错.COFF为Common Object File Format,通用对象文件格式,它的出现为混合语言编程带来方便 ...

  7. 【Intel AF 2.1 学习笔记一】AF程序结构

    Intel App Framework(原jqMobi)是用来开发hybrid app的开源免费框架,被intel收编之后发布了最新的2.1版本,最近正在学习.af的所谓程序结构,就是AF网页的架构, ...

  8. iview 下拉刷新loadTop报错解决

    <div class="noData" v-if="lifeList.length==0"> <img src="../assets ...

  9. 2 URL的玩法

    preface 这里我主要说说flask的URL玩法 include: 动态URL规则 自定义URL转换器 HTTP方法 唯一的URL 构造URL 跳转和重定向 动态URL规则 URL规则可以添加变量 ...

  10. QT 随机数生成

    下面总结了QT中随机生成的方法(仅供学习参考),分为旧方法和新方法,一般来说,旧的方法已经被抛弃,在开发新的应用中推荐使用新方法.  C++ Code  12345678910111213141516 ...