Windows Phone 7 學習筆記 - 系統托盤和應用程序欄
系統托盤
系統托盤僅僅顯示一些系統的狀態,有時候我們要隱藏它,用下面的代碼:
this.SetValue(SystemTray.IsVisibleProperty,!(bool)this.GetValue(SystemTray.IsVisibleProperty));
注意不要忘了引入Microsoft.Phone.Shell這一命名空間。
應用程序欄
1、使用XAML生成應用程序欄
Windows Phone SDK 附帶的頁面模板包含被注釋掉的示例應用程序欄的 XAML。取消 XAML 的注釋以創建應用程序欄。如:
<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem Text="MenuItem 1"/> <shell:ApplicationBarMenuItem Text="MenuItem 2"/> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>
增刪改點內容就可以用了,要注意引用的圖片需要把屬性修改為content。
2、使用C#生成應用程序欄
有時應用程序欄需要根據用戶的操作來改變應用程序欄的一些設置,這樣通過XAML生成應用程序欄就行不通了,所以需要通過C#來生成應用程序欄。
(1)在代碼的頂部,添加Microsoft.Phone.Shell這一命名空間。
using Microsoft.Phone.Shell;
(2)在頁面的構造函數中,在對 InitializeComponent 的調用之后,添加以下代碼。該代碼初始化新的 ApplicationBar 對象并將該對象分配給頁面的 ApplicationBar 屬性。
ApplicationBar = new ApplicationBar();
(3)設置所需的應用程序欄屬性。
ApplicationBar.Mode = ApplicationBarMode.Default; ApplicationBar.Opacity = 1.0; ApplicationBar.IsVisible = true; ApplicationBar.IsMenuEnabled = true;
(4)根據需要創建一個或多個 ApplicationBarIconButton 對象。設置圖標圖像和按鈕文本,然后將它們添加到應用程序欄。如果您未設置按鈕文本,則會發生運行時異常。
ApplicationBarIconButton button1 = new ApplicationBarIconButton(); button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative); button1.Text = "button 1"; ApplicationBar.Buttons.Add(button1);
(5)菜單項是可選的。根據需要創建一個或多個 ApplicationBarMenuItem 對象。設置文本,然后將它們添加到應用程序欄。
ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem(); menuItem1.Text = "menu item 1"; ApplicationBar.MenuItems.Add(menuItem1);
(6)下面是一個已完成的應用程序欄示例。
public MainPage() { InitializeComponent(); ApplicationBar = new ApplicationBar(); ApplicationBar.Mode = ApplicationBarMode.Default; ApplicationBar.Opacity = 1.0; ApplicationBar.IsVisible = true; ApplicationBar.IsMenuEnabled = true; ApplicationBarIconButton button1 = new ApplicationBarIconButton(); button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative); button1.Text = "button 1"; ApplicationBar.Buttons.Add(button1); ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem(); menuItem1.Text = "menu item 1"; ApplicationBar.MenuItems.Add(menuItem1); }
(7)對于每個圖標按鈕和菜單項,確定用戶單擊時要調用的事件。下面是來自上一過程的、確定了單擊事件的應用程序欄的示例。
ApplicationBarIconButton button1 = new ApplicationBarIconButton(); button1.IconUri = new Uri("/Images/YourImage.png", UriKind.Relative); button1.Text = "button 1"; ApplicationBar.Buttons.Add(button1); button1.Click += new EventHandler(button1_Click); ApplicationBarMenuItem menuItem1 = new ApplicationBarMenuItem(); menuItem1.Text = "menu item 1"; ApplicationBar.MenuItems.Add(menuItem1); menuItem1.Click += new EventHandler(menuItem1_Click);
(8)對于每個圖標按鈕和菜單項,添加用戶單擊時要調用的事件。在頁面類中添加代碼。下面是來自上一過程的應用程序欄的單擊事件示例。
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Button 1 works!"); //Do work for your application here. } private void menuItem1_Click(object sender, EventArgs e) { MessageBox.Show("Menu item 1 works!"); //Do work for your application here. }
3、透明度
透明度可以設置為0到1的數值,但是推薦使用0,0.5或者是1。如:
shell:ApplicationBar IsVisible=“True” IsMenuEnabled=“True” Opacity=“0.5”
4、使用Expression Blend 創建應用程序欄
(1)先解開注釋掉的ApplicationBar;
(2)右鍵該頁面使用Expression Blend 打開;
(3)打開此頁面后,看到Expression Blend 左邊的面板上Objects and Timeline 面板;
(4)如上面板的內容,微軟為我們默認添加了兩個ApplicationBarIconButton(最多四個)和兩個 ApplicationBarMenuItem,下面編輯這四個節點的內容,并為其添加點擊事件和圖片內容。點擊第一個 ApplicationBarMenuItem,中間的顯示圖效果自動定位并顯示,如下圖:
(5)視角右移到右上角,并選中第一個選項卡:元素屬性,面板的最右邊有兩個選擇圖標。如下圖所示,藍色箭頭代碼元素的基本屬性(包括Name和Text,其他UI有更多屬性這里不詳細介紹),紅色箭頭代表該元素的事件;
(6)好了,認識了一些基本的原理,下面來改改吧,將Name 改為“AboutApplicationBar ”。然后,將對應的Text 改為“關于”。轉到事件面板,雙擊它,它會自動幫我們在CS代碼里面生成一個事件句柄,像這樣:
(7)根據上面的操作,將下面的 ApplicationBarMenuItem改為“查看圖片”的菜單。下面來做ApplicationBarIconButton,具體操作跟上面是一 致的,唯一區別的是ApplicationBarIconButton 需要一個圖片資源,利用Expresssion Blend 可以很方便的為其添加圖片資源,并且這些圖片資源都是微軟建議使用的圖片,選中ApplicationBarIconButton 會看到面板屬性比上面的MenuItem多了一個屬性,如下圖這個屬性是一個圖片的地址,并且它是一個下拉框允許我們選擇,看看圖吧:
ps:這些圖片位于C:\Program Files\Microsoft SDKs\Windows Phone\v7.0\Icons 目錄。
補充:(1)由于應用程序欄不是 Silverlight 控件,并不繼承自FrameworkElement,因此應用程序欄不支持某些常見的控件功能,如數據綁定。這意味著不能通過使用 XAML 格式的名稱屬性來更改圖標按鈕和菜單項。如果您希望在運行時動態修改文本或圖標,則應該使用 C# 或 Visual Basic 創建應用程序欄,詳見上面的通過C#生成應用程序欄。
(2)在有些情況下我們會需要提供橫跨整個應用程序的通用功能,這樣,如果一個一個頁面的顯示ApplicationBar,這樣效率很低,所以可以寫一個通用的ApplicationBar,提供給整個應用程序使用。
由于是提供給整個應用程序使用,所以需要在App.xaml 注冊,如:
<!--注冊 應用程序欄--> <shell:ApplicationBar x:Key="MainAppBar" IsVisible="True"> <!--菜單項 Abou--> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem Text="About" Click="ApplicationBarMenuItem_Click"/> </shell:ApplicationBar.MenuItems> <!--應用程序條 按鈕--> <shell:ApplicationBar.Buttons> <shell:ApplicationBarIconButton Text="Web" IconUri="ie_icon.png" Click="ApplicationBarIconButton_Click"/> <shell:ApplicationBarIconButton Text="Images" IconUri="pictures_Icon.png" Click="ImageEvent_Click"/> </shell:ApplicationBar.Buttons> </shell:ApplicationBar>
進入APP.xaml.cs在自動生成的事件中,鍵入代碼:
private void ApplicationBarMenuItem_Click(object sender, EventArgs e) { PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; root.Navigate(new Uri("/About", UriKind.Relative)); } private void ApplicationBarIconButton_Click(object sender, EventArgs e) { } private void ImageEvent_Click(object sender, EventArgs e) { PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; root.Navigate(new Uri("/Pictures",UriKind.Relative)); }
這樣ApplicationBar就已經注冊好了,在需要顯示應用程序欄的頁面的phone:PhoneApplicationPage節點指定ApplicationBar來源,比如本文的指定方式:
<phone:PhoneApplicationPage x:Class="DataBind.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True" ApplicationBar="{StaticResource MainAppBar}" >
原文鏈接:http://www.cnblogs.com/zhangkai2237/archive/2012/02/14/2351372.html