天天看點

Windows Phone 8初學者開發—第16部分:使用應用程式欄

作為一個簡單的聲音面闆程式,SoundBoard工作得很好,但是我們希望超越正常并啟用自定義聲音,即使用者可以錄制并重複使用的聲音。這就要求對應用程式進行一些更改。在本課中我們将添加一個含有錄制按鈕的應用程式欄。當使用者單擊它時,我們将把使用者導航到一個新的XAML頁面,在那裡使用者可以錄制新的自定義聲音。

即使您不知道它的名稱,您可能在以前就見過應用程式欄。應用程式欄出現在應用程式可視區域的底部并且可以包含一些圖示以及一個省略号,當點選省略号時将顯示圖示下的文本,并可能顯示一個額外的選項菜單。在本課結束前我們将學會如何使用它。

這裡是本課的計劃:

項目模闆中已經為應用程式欄建立了一些樣闆代碼。我們将取消代碼的注釋并對它進行修改以顯示包含錄制按鈕和菜單選項的應用程式欄。

我們将使用AppResources.resx,這樣新的應用程式欄中的文本可以在将來被本地化。

我們将清除一些無用的檔案,舊資料模型将被清理。

我們将為應用程式欄和菜單選項關聯并建立事件處理程式方法的存根。

在MainPage.xaml.cs中,MainPage()構造函數中有一行被注釋掉的調用BuildLocalizedApplicationBar()的代碼。我将取消改行的注釋:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

然後取消注釋在代碼頁下方的實際方法:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

通過取消注釋這些代碼,我們向應用程式添加了一個簡單的應用程式欄。

顯然我們希望将第67行中引用的圖像更改為Assets\AppBar檔案夾中的microphone.png檔案。

Windows Phone 8初學者開發—第16部分:使用應用程式欄

是以我将進行此項更改:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我将運作該應用程式。應用程式将顯示包含麥克風圖示和省略号的應用程式欄。當點選省略号時将顯示一個标題為“菜單選項”的菜單選項。

Windows Phone 8初學者開發—第16部分:使用應用程式欄

在麥克風圖示下面将出現文字“添加”。讓我們更改這兩項内容。

首先,方法的标題"BuildLocalizedApplicationBar"表明該應用程式欄從AppResources.resx擷取文本值。是以讓我們打開該檔案:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

并進行以下更改:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我添加了一個名稱為AppBarAbout的屬性并設定它的值為About

我添加了一個名稱為AppBarRecord的屬性并設定它的值為Record

我添加了一個名稱為AppBarSave的屬性并設定它的值為Save

并且我删除了不再使用的屬性,包括:

AppBarButtonText

AppBarMenuItemText

SampleProperty

我儲存該檔案。

接着,我需要對BuildLocalizedApplicationBar()進行一些重寫以使用在AppResources.resx檔案中添加的設定:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我重寫了建立"Record"按鈕的代碼

我重寫了建立"About"菜單選項的代碼

我将它們添加到應用程式欄

當我嘗試運作應用程式時,我看到可能是倉促中從AppResources.resx中删除了"SampleProperty":

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我發現問題是由我不需要使用的代碼造成的:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我可以通過删除舊資料模型取得一舉兩得的效果。我選擇ItemViewModel.cs和MainViewModel.cs,右鍵單擊它們并從上下文菜單中選擇删除。這将删除不必要的代碼并删除對AppResources.resx中不存在條目的錯誤引用。

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我最喜歡的作者之一說過有條不紊以保持高效。像壽司師傅那樣保持工作區域的幹淨。雖然我會注釋掉不需要的代碼,我也會每天梳理代碼以保持代碼整潔。當我打開他人的代碼并進行觀察時,我自動假設它們都被使用。但是有時候存在沒有被調用的類或方法。這将帶來不便和混亂。當我真正寫代碼而不是錄制視訊時,我依靠稱為ReSharper的第三方工具。它會分析您的代碼并查找未使用的類和方法,它可以定位重複代碼并給出建議的更改并提供非常多的針對您代碼的改進。我強烈推薦該工具。

總之,當我們這次運作應用程式時,我們可以看到應用程式欄中有我們期待的文字:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我們希望在本課的最後将單擊事件處理程式方法關聯到新的按鈕和菜單項:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

根據我們在關于事件的課程中所學内容,我添加了69行的代碼,它将RecordAudioClick方法添加到方法清單中,并通過Record按鈕的單擊事件被觸發。為建立方法的存根,使用在事件課程中所學的技術,将滑鼠光标懸停到位于RecordAudioClick中字母R下方的藍色虛線上以顯示菜單,并選擇“生成方法存根”菜單選項:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

這将為事件處理程式建立一個方法存根,在方法中通過抛出一個異常提醒該方法尚未實作:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我們将對"about"菜單項重複這個過程。在下面的75行我為菜單選項的單擊事件關聯了一個稱為AboutClick的方法事件處理程式:

Windows Phone 8初學者開發—第16部分:使用應用程式欄

我使用前面描述的技術為RecordAudioClick()(第86行至第89行)建立了一個方法存根。

綜上所述,本課重點是如何建立應用程式欄,應用程式欄圖示和應用程式欄菜單選項。我們使用了模闆代碼和AppResources.resx,并關聯到了事件處理程式的方法存根,我們将在後續課程中完全實作這些方法。

繼續閱讀