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

这个方法比较简单,网上很容易找到资料,不过我还是简要的说一下。

首先要在页面资源里添加需要的AppBar,我这里添加了两个银色的AppBar。一个默认模式,一个最小化模式。

<phone:PhoneApplicationPage.Resources>
<shell:ApplicationBar x:Key="AppBar_1" BackgroundColor="Silver" Mode="Default" IsVisible="True">
<shell:ApplicationBarIconButton IconUri="/Assets/AppBar1/add.png" Text="添加"/>
<shell:ApplicationBarIconButton IconUri="/Assets/AppBar2/check.png" Text="确认"/>
</shell:ApplicationBar>
<shell:ApplicationBar x:Key="AppBar_2" BackgroundColor="Silver" IsMenuEnabled="True" Mode="Minimized" IsVisible="True">
</shell:ApplicationBar>
</phone:PhoneApplicationPage.Resources>

然后在Pivot的selectionChanged事件中修改对应的AppBar,第三个设置为NULL即没有AppBar,就完事啦。

private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (pivot.SelectedIndex == )
{
ApplicationBar = (Microsoft.Phone.Shell.ApplicationBar)Resources["AppBar_1"];
}
else if (pivot.SelectedIndex == )
{
ApplicationBar = (Microsoft.Phone.Shell.ApplicationBar)Resources["AppBar_2"]; }
else if (pivot.SelectedIndex == )
{
ApplicationBar =null ;
}
}

效果就是前面那个GIF的效果,但是你现在回去看前面那个GIF会发现切换的时候有个黑条,发生在AppBar改变高度的时候,在我实际使用中如果再在加上AppBarMenu的话,会产生更明显的黑条,并造成非常非常非常非常明显的卡顿。(手头的机子是920)

这个问题简直神坑,网上资料很少,所以我就传播一下找到的方法吧(●'◡'●),让AppBar”拥有透明特性“,即让opacity(透明度)不等于1。如果你想要的是纯色不透明的效果(其实也只有这种情况才会遇到这个问题。。。),opacity(透明度)设置为0.99,可以解决黑条问题,而且看起来仍然是纯色不透明的。

<phone:PhoneApplicationPage.Resources>
<shell:ApplicationBar x:Key="AppBar_1" BackgroundColor="Silver" Mode="Default" IsVisible="True" Opacity="0.99">
<shell:ApplicationBarIconButton IconUri="/Assets/AppBar1/add.png" Text="添加"/>
<shell:ApplicationBarIconButton IconUri="/Assets/AppBar2/check.png" Text="确认"/>
</shell:ApplicationBar>
<shell:ApplicationBar x:Key="AppBar_2" BackgroundColor="Silver" IsMenuEnabled="True" Mode="Minimized" IsVisible="True" Opacity="0.99">
</shell:ApplicationBar>
</phone:PhoneApplicationPage.Resources>

这样解决了黑条问题以及性能问题,事情会变成这样,怎么想都是微软的错。。。

下面的GIF就是opacity改成0.99后的效果,和前图的视觉效果没什么差,但是没有黑条流畅多了。

解释:以我的理解,如果AppBar的opacity为1,就会被认为是完全不透明,于是AppBar的”底下“就没必要加载应用的”UI的元素“,反正也看不到,所以它底下就是空白的frame页面,颜色和背景色的黑白设定一致(多数人是选的是黑色背景)。这时如果AppBar高度降低或者消失,一瞬间就会暴露底下的frame,让你看到相同大小的黑条或者白条,然后在frame上加载应有的UI元素(比如背景图案之类的),这也造成了一些卡顿感。。。如果AppBar是半透明的,它底下就是的UI元素在一开始就是加载好的(这样你才能透过AppBar看到它们),就不会出现黑条/白条,也不卡了。

  有时候我们希望AppBar是纯色不透明的,把opacity设置为0.99,正常人看不出差异,但是系统认为他是半透明的。

<WP8开发学习笔记>ApplicationBar(任务栏)的切换以及“黑条问题”的更多相关文章

  1. <WP8开发学习笔记>获取手机的常用型号(如Lumia920,而非RM-822)

    之前WP7时代可以用API获得WP手机的型号如lumia510,但是到了WP8后用APi只能获得硬件版本号了如RM-822,这种型号可以让我们更详细的了解具体的硬件版本,比如国行和港行,设备版本号不一 ...

  2. <WP8开发学习笔记>动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)

    很多时候我们需要在启动程序的时候根据状态改变初始导航页面,比如程序在启动的时候判断用户是否登录, 如果未登录则跳转到LoginPage.xaml否则跳转到MainPage界面. 这时候就要分析程序的启 ...

  3. <WP8开发学习笔记>修改panorama全景控件的标题的大小

    panorama(全景)控件非常具有WinPhone特色,但是那个巨大的标题许多时候会让人觉得违和.怎么修改它呢? 最开始想到的是加一个FontSize,结果毫无影响.╮(╯-╰)╭ <phon ...

  4. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  5. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  6. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  7. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  8. 高性能Cordova App开发学习笔记

    高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...

  9. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

随机推荐

  1. python基本数据类型:字符串及其方法(二)

    格式化类 方法join() #join()用指定字符每间隔拼接字符串 name='miku' name1=' '.join(name) print(name1) 方法center() #center( ...

  2. 哈理工新生赛 马拉车+贪心 最大密度子图 AC自动机+DP

    J.Symmys Time Limit: 1000 MS Memory Limit: 262144 K Total Submit: 50 (13 users) Total Accepted: 2 (2 ...

  3. 【MySQL】深入理解MySQL锁和事务隔离级别

    先看个小案例: 话不多说,上案例,先创建一个表 mysql> CREATE TABLE IF NOT EXISTS `account`( `id` INT UNSIGNED AUTO_INCRE ...

  4. Lowest Common Multiple Plus(hdu2028)

    思考: 乘法爆咋数据.把int换成unsigned就过了,同时%d换成%u.求最大公约数和最小公倍数. #include<stdio.h> int gcd(unsigned x, unsi ...

  5. vue2.0+mint-ui 仿资讯类顶导航内容联动优化

    <template><div><div class="navbox"><div class="nav" id=&quo ...

  6. 官网下载Java连接MySql驱动jar包

    官网地址:http://dev.mysql.com/downloads/connector/ 1.选择下载驱动 2.选择下载 3.可以不登录直接下载 4.下载下来的是zip压缩包,解压之后,文件夹中有 ...

  7. mysql新

    .数据库服务器:运行数据库管理软件的计算机 .数据库管理软件:MySQL,oracle,db2,sqlserver .库:文件夹 .表:文件 .记录:事物的一系列典型特征:name,age,schoo ...

  8. 实验二:Linux系统简单文件操作命令

    項目 内容 这个作业属于哪个课程() 课程链接 这个作业的要求在哪里 实验要求 学号-姓名 17043133-木腾飞 作业学习目标 学习在Linux系统终端下进行命令行操作: 学习掌握常用命令行操作并 ...

  9. Xmind写测试点

    引入: 既然我们这篇要说<Xmind写测试点>,那么先来回顾一下,什么情况下才写测试点,而不写测试用例. 之前写过一篇<测试用例-20问20答>,没看过的朋友戳这里:,其中就有 ...

  10. [JavaWeb基础] 024.Socket编程之简单的聊天程序

    1.Socket的简介 1)什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket ...