这个问题Win8.1才会碰到,WP因为不支援上方应用程式列所以应该是没机会
(这是真的,开发文件已经说你要是在Page有定义上方应用程式列就会闪退给你看)
有看微软的开发文件,应该都会看到微软有在文件中提到,
上方应用程式列应该要能够担当导览列的功能
(亦即我们常在网站上看到的那一排指示网站主要功能的功能列)
在这前提下,自然每一页都要有上方应用程式列,
不过如果你的页面多达十数个
(这是夸张化,实际上有善用资料绑定的话应该不可能超过十页吧)
每一页都要建同样的应用程式列与触发事件也许太不实际了
最好的方法,当然是让所有页面共用一个应用程式列就好
微软的官方网站上也有给教学:
http://msdn.microsoft.com/zh-tw/library/windows/apps/xaml/jj150604.aspx
不过如果只给这个的话某程度上是在骗文章数(喂
所以这边是稍微做补遗还有提示可以善用的方向
简单来说,就是在首页里面再加上一层Frame,
然后在这个Frame里面显示APP的其他内容,
至于应用程式列就直接定义在首页中,这样子就可以达到共用的效果
如果感觉有点难理解的话,只要把Frame元件想像成HTML的Iframe标签
或者甚至当成你的浏览器中显示内容的那个区块
(简单说设在首页的应用程式列相当于浏览器的工作列,
其他页面就相当于呈现在浏览器内容框中的网页)
(其实在Clark大与Ian大写的《HTML5 & JavaScript程式开发实战》这本书中
就有提到类似的概念,不过因为里面是用HTML5写Win8 APP所以可能比较不好懂)
至于关于那篇教学的部分,这边做一点补充
1. 按照教学在Grid里面建立rootFrame这个Frame元件后,
实际上打开是不会有反应的,你必须自己让rootFrame去导览到真正的首页才行
这边先假设真正首页的名字是DefaultPage.xaml,
那么程式码如下:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e); // (这句有没有都无所谓)
rootFrame.Navigate(typeof(DefaultPage));
}
虽然可能有些文件会告诉你Frame.Navigate这个方法
在OnNavigatedTo/OnNavigatedFrom这两个事件中是不会作用的
但那是指于这两个事件中在该文件所在的页框中呼叫该页框的Navigate方法,
该页框不会有任何反应这件事
这段程式码不是去呼叫首页所在页框中的Navigate方法
而是去呼叫首页中的Frame的Navigate方法,因此这个方法会有效
另外传送参数的方法和普通的巡览页面是相同的,请放在Navigate方法的第二个参数。
2. 范例中是呼叫GetType的方法去取得页面物件并进行巡览方法,
但是我实际使用的时候不知道是哪里漏了,GetType方法抓不到子命名空间中的页面
所以最后我只好直接用判断按钮Name/Tag的方式
如果没有什么特大问题的话其实用if判断式或switch判断式也无妨
这个方法主要是使用在Win8.1上,
不过如果有用Universal App的话,其实也能考虑用这个方法
在Win8.1的环境下把导览之类的交给上方导览列
在WP8.1的环境下可以直接用手机上的巡览功能做处理
这样就有更多东西可以共用了。
(刚才才终于把捷运APP用的资料编辑程式给写好......有点头痛)