一.Application Bar
Windows Phone中的菜單欄最多可以顯示4個圖標按鈕。這些圖標會自動地被從左向右添加到菜單欄中。如果還有額外的選項可以通過菜單項來添加,這些菜單項默認是不顯示的。只有在點擊菜單欄右側的省略號(或省略號下方的區域)時纔會顯示出來,在電話屏幕的方向改變時,系統會自動處理菜單欄的方向(包括按鈕和菜單項)。
按鈕中的圖標應該是48 x 48像素的,其他的尺寸會自動被縮放爲48x48的,不過這通常會導致失真。
二.通過XAML代碼創建菜單欄
在一個新建的Silverlight for Windows Phone項目中,默認的MainPage.xaml文件中有一段被註釋掉的代碼,這就是與ApplicationBar相關的代碼:
<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png" Text="Add" Click="btnAdd_Click"/>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.minus.rest.png" Text="Minus" Click="btnMinus_Click"/>
<shell:ApplicationBar.MenuItems>
<shell:ApplicationBarMenuItem Text="菜單項1" Click="menuItem1_Click"/>
<shell:ApplicationBarMenuItem Text="菜單項2" Click="menuItem2_Click"/>
</shell:ApplicationBar.MenuItems>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
圖中的IconUri並不存在,我們需要自己來添加圖標文件,注意圖片的Build Action屬性應該爲Content,然後修改相應的路徑即可。關於圖標我們可以在本機的X:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons目錄下找到。IsVisible用來控制菜單欄的可見性,IsMenuEnabled用來控制是否彈出菜單項。同時我們還可以爲圖標按鈕和菜單項添加Click事件處理程序。
三.通過託管代碼創建菜單欄
下面演示通過託管代碼創建菜單欄,在程序中引用ApplicationBar類需要添加using Microsoft.Phone.Shell;名稱空間。完整代碼如下:
{
InitializeComponent();
ApplicationBar applicationBar;
applicationBar = new ApplicationBar();
this.ApplicationBar = applicationBar;
applicationBar.IsMenuEnabled = true;
applicationBar.IsVisible = true;
ApplicationBarIconButton btnAdd = new ApplicationBarIconButton(new Uri("/Images/appbar.add.rest.png", UriKind.Relative));
btnAdd.Text = "cancel";
ApplicationBarIconButton btnMinus = new ApplicationBarIconButton(new Uri("/Images/appbar.minus.rest.png", UriKind.Relative));
btnMinus.Text = "close";
applicationBar.Buttons.Add(btnAdd);
applicationBar.Buttons.Add(btnMinus);
ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem("菜單項1");
ApplicationBarMenuItem menuItem2 = new ApplicationBarMenuItem("菜單項2");
applicationBar.MenuItems.Add(menuItem1);
applicationBar.MenuItems.Add(menuItem2);
btnAdd.Click += new EventHandler(btnAdd_Click);
btnMinus.Click += new EventHandler(btnMinus_Click);
menuItem1.Click += new EventHandler(menuItem1_Click);
menuItem2.Click += new EventHandler(menuItem2_Click);
}