這個問題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用的資料編輯程式給寫好......有點頭痛)