windows phone7 學習筆記07——系統托盤和應用程式欄

來源:互聯網
上載者:User

  系統托盤

  系統托盤僅僅顯示一些系統的狀態,有時候我們要隱藏它,用下面的代碼:

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://terryblog.blog.51cto.com/1764499/461551

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.